本文共 3404 字,大约阅读时间需要 11 分钟。
调用函数
1、调用函数有两种方式,
一种是内置函数(相当于C和C++中的库函数),另一种是自定义的函数,我们先来看下内置函数的使用,比如pow(x,y),计算x ** y,即x的y次方:
python中,变量名都没有类型定义的,这点与C和C++不同,因此,在定义变量的时候,不要与内置函数冲突,否则定义的时候不报错,使用函数的时候会报错,例如:
定义函数
python中定义函数用def关键,并且没有返回类型,与C和C++不一样的定义方式,函数名与变量命名一样,只能包含字母、数字和下划线,且不能以数字开头,这点与C和C++一样。
#area.pyimport mathdef area(radius): """returns the area of a circle with the given radius. for example: >>> area(5.5) 95.033177771091246 """ return math.pi * radius ** 2print("area(5)==========", area(5))
与内置函数一样,可以轻松地查看自己编写的函数的文档字符串,如下所示:
python 函数也可以不带返值,例如:
#notReturnValue.pydef say_hello_to(name): """Prints a hello message. """ cap_name = name.capitalize()print(say_hello_to('aa'))
变量作用域
函数带来的一个重要问题是作用域。这点与C和C++类似,只最局部变量以代码块所在的区域为限,参数也是局部变量,例如:
#local.pyimport mathdef dist(x, y, a, b): s = (x - a) ** 2 + (y - b) ** 2 return math.sqrt(s)def rect_area(x, y, a, b): width = abs(x - a) height = abs(y - b) return width * height
函数结束时,其局部变量被自动删除。
全局变量
在函数外面声明的变量称为全局变量,程序中的任何函数或代码都可读取它。然而,在函数中不能直接给全局变量赋值,python会把在函数内的同名变量当做局部变量处理。例如:
#global_error.pyname = 'Jack' #name为全局变量def say_hello(): print('Hello ' + name + '!')def change_name(new_name): name = new_name #name当作局部变量处理
从调用change_name的结果看,并不符合预期,全局变量name的值并没有变,依然是'Jack'。问题在于Python将函数change_name中的变量name视为局部变量,因此修改的并非全局变量name。(这 点与C和C++不同)
要访问全局变量,必须使用关键字glogbal:
#global_correct.pyname = 'Jack'def say_hello(): print('Hello ' + name + '!')def change_name(new_name): global name name = new_name
使用main函数
在你编写的任何Python程序中,通常都至少应该使用一个函数:main()。根据约定,main()函数被认为是程序的超点。例如,编写前一章的密码检查程序时,可使用main函数:
#password2.pydef main(): pwd = input('What is the password? ') if pwd == "apple": print("Logging on ...") else: print("Incorrect password.") print("All done!")
函数参数
1.按引用传递,Python采用按引用传递参数,(C++可按值和引用两种方式传递参数),这意味首当你传递参数时,函数将使用新变量名来引用原始值。例如:
#reference.pydef add(a, b): return a + b
启动IDLE的交互式命令,并这样做:
按引用传递简单而高效,但有些事情它做不了,例如,请看面这这个名不副实的函数:
#referance2.pydef set1(x): x = 1
函数set1想将传入的变量的值设置为1,但如果你尝试运行它,结果并不符合预期:
m的值根本没变,太令人意外了。这都是按引用传递导致的。为帮助理解,将这个示例分解成下面几步:
1。将5赋给m。
2。调用set1(m):将m的值赋给x,这样m和x都指向5。
3。将1赋给x,结果如图5-4所示。
4。函数set1结束后,x被删除。
在函数set1中,根本不能访问变量m,因此无法修改它指向的值。
默认值
给参数指定默认值通常很有帮助。例如:在下面的函数中,给参数greeting指定了默认值'Hello':
#greetings.pydef greet(name, greeting = 'Hello'): print(greeting, name + "!")
两种不同的方式调用函数greet
关键字参数,在Python中,另一种很有用的参数指定方式使用关键字。例如:
#shopping.pydef shop(where = 'store', what = 'pasta', homuch = '10 pounds'): print("I want you go to the ", where) print('and buy ', howmuch, ' of ', what + '.')
调用使用关键字参数的函数时,以param = value的方式传递数据。例如:
关键字参数有两大好处。首先,它们清晰地指出了参数值,有助于提高程序的可读性;其次,关键字参数的顺序无关紧要。对于包含大量参数的函数来说,这两点都很有帮助,因为很难记住这些函数的参数的顺序和含义。
模块
模块是一系列相关的函数和变量。
要创建模块,可创建一个.py文件。在其中包含用于完成任务的函数。例如,下面是一个简单的模块,用于在屏幕上打印形状:
#shapes.py"""A collection of functions for printing basic shapes."""CHAR = '*'def rectangle(height, width): """Prints a rectangle.""" for row in range(height): for col in range(width): print(CHAR, end = '') print()def square(side): """Prints a square.""" rectangle(side, side)def triangle(height): """Prints a right triangle.""" for row in range(height): for col in range(1, row + 2): print(CHAR, end = '') print()
模块与常规Python程序之间唯一的差别是用途不同:模块是一个由函灵敏组成的工具箱,用于编写其他程序。因此,模块通常没有main()函数。
要使用模块,只需导入它即可。例如:
名称空间
对于模块,很有用的一点是它们形成名称空间。名称空间基本上就是一组独特的变量名和函数名。要让模块中的名称在模块外面可见,你必须使用import 语句。
转载地址:http://guiub.baihongyu.com/