Python编程入门-第五章 函数 -学习笔记
第五章 函数
一、调用函数
对于函数pow(x,y),它是内置在Python中的,提供计算x的y次方的功能。
其中pow是函数名,x和y是函数的两个参数,函数返回值是x的y次方。
而另外还有一些函数不提供返回值,只实现一些指定的功能,比如print函数。
二、定义函数
#自定义一个计算圆面积的函数 import math def area(r): """Returns the area of a circle with the given radius. For example: >>>area(5.5) 95.033177771091246 """ return math.pi*(r**2)
上述代码中定义了一个计算圆面积的函数,函数名为area,半径r作为为参数。
*格式约定:python文档字符串通常用三引号标识文档字符串的开始和结束位置。对于上述自定义函数area可以通过print(area.__doc__)来查看函数的文档字符串。
*对于没有返回值的函数,默认返回为None,即:没有返回值。
三、变量的作用域
import math def 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
对于上述示例中,在函数dist和rectarea中均有各自的局部变量x,y,a,b,除此之外,dist函数还有局部变量s,rect_area中还有width和height两个局部变量。局部变量仅在其所属函数中使用,函数结束时局部变量也会被自动删除。
*全局变量:在函数外面声明的变量称为全局变量,程序中的任何函数和代码都可以访问全局变量。
name='Jack' def say_hello(): print('Hello '+name+'!') def change_name(new_name): #实际运行中,我们可以发现全局变量name并没有发生改变 #是因为函数体内的name变量为局部变量,调用时该局部变量屏蔽了全局变量 name=new_name
如果要针对上述的change_name()中访问并给全局变量name赋值,需要先通过关键字global声明使用的为全局变量。
name='Jack' def say_hello(): print('Hello '+name+'!') def change_name(new_name):
#通过global声明函数体中使用的name为全局变量
global name name=new_name
四、使用main函数
在任何python程序中,通常都至少应该使用一个函数:main()。main()函数被认为是程序的起点。如下例:
def main(): pwd=input('please input the password:') if(pwd=='apple'): print('Logging on...') else: print('Icorrect password!') print('All Done!')
如果在IDLE中运行上述程序时,并不会有什么输出,必须在提示符后输入main()来执行程序代码。
五、函数的参数
1、按引用传递
向函数传递参数时,Python采用按引用传递的方式,即传参时,函数将使用新变量名来引用原始值。
def add(a,b): return a+b x,y=3,4 print(str(add(x,y)))
x,y是全局变量,当调用函数add(x,y)时,实际上是把实参x,y的值分别传递给了函数的本次局部变量a,b,函数运行完毕返回值后a和b被系统销毁,而x和y并未受影响。
对于如下示例:
def set1(x): x=1 m=5 set1(m) print(m)
运行后发现m的值并没有变化(仍然是5),这里是因为函数set1运行时,只是把全局变量m的值传递给局部变量x,而m本身值没有发生变化。
2、给参数指定为默认值
如对于下例函数:
def greet(name,greeting='Hello'): print(greeting,name+'!') greet('Bob') greet('Bob','Good morning')
输出为:
Hello Bob!
Good morning Bob!
这里发现,对于第二个参数,可以隐去,那调用时候会默认为函数定义时的方式;也可以显式写出第二个参数的常量值,这时运行后将用这个常量值替代定义时的默认值。
需要注意的是:带默认值的参数不能位于没有默认值的参数之前。
3、关键字参数
def shop(where='store',what='pasta',howmuch='10 pounds'): print('I want you to go to the',where) print('and buy',howmuch,'of',what+'.') shop() shop(what='towels') shop(howmuch='a ton',what='towels',where='bakery')
输出如下:
I want you to go to the store and buy 10 pounds of pasta. I want you to go to the store and buy 10 pounds of towels. I want you to go to the bakery and buy a ton of towels.
可以看出使用关键字参数的函数在特定情况下使用会十分方便,可以不指定参数,这样就是直接使用定义函数时的参数,也可以指定部分或全部参数重新改变输出。并且,关键字参数的顺序可以打乱。
六、模块
首先,模块是一系列相关的函数和变量。
1、创建Python模块
要创建模块,可以建立一个单独的.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()函数。当Python程序需要使用模块的时候,可以通过import来导入即可使用。