Python编程入门-第五章 函数 -学习笔记

来源:互联网 发布:谷歌输入法linux版 编辑:程序博客网 时间:2024/05/21 11:22

第五章 函数

一、调用函数
对于函数pow(x,y),它是内置在Python中的,提供计算x的y次方的功能。
其中pow是函数名,x和y是函数的两个参数,函数返回值是x的y次方。
而另外还有一些函数不提供返回值,只实现一些指定的功能,比如print函数。

二、定义函数

#自定义一个计算圆面积的函数import mathdef 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 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

对于上述示例中,在函数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并没有发生改变    #是因为在change_name函数中,下一句定义了一个同名的函数内局部变量    name=new_name

如果要针对上述的change_name()中访问并给name赋值,需要先通过关键字global声明使用的为全局变量。

name='Jack'def say_hello():    print('Hello '+name+'!')def change_name(new_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+bx,y=3,4print(str(add(x,y)))

x,y是全局变量,当调用函数add(x,y)时,实际上是把实参x,y的值分别传递给了函数的本次局部变量a,b,函数运行完毕返回值后a和b被系统销毁,而a和b并未受影响。
对于如下示例:

def set1(x):    x=1m=5set1(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 storeand buy 10 pounds of pasta.I want you to go to the storeand buy 10 pounds of towels.I want you to go to the bakeryand 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来导入即可使用。

0 0
原创粉丝点击