函数的定义
我们常说python是一种优雅的语言,那么它优雅在哪呢?python与其它大多数编程语言拥有同样的优雅,其优雅体现在其利用函数的定义使得其后续可以多次调用,减少程序代码量以及运行的时间。
在python中函数定义语法如下:
def function_name(arg1,arg2[,...]):
statement
[return value]
上述的arg1,arg2[,…],为参数列表(parameter list),它可以由零个、一个或多个参数组成。
另外,参数可以有形参和实参之分(具体点击),形参相当于一个变量而实参就是一个数字。在参数列表中,我们可以放置形参,也可以放置实参,但若参数列表中的时形参,在调用函数时,必须将实参的值赋给形参才能得出结果。此外,字符串的实参记得要加引号。
函数的定义一定要有圆括号、冒号,后续的语法一定要缩进。
最后一行return value(返回值)是返回某一定义的参数,它的作用是结束函数的调用,可以出现在函数体的任意位置,也可以不定义,只要返回值没有定义,python默认返回值为None。
调用函数的形式
关键字调用,即在调用函数时同时给出形式参数和实际参数,这样可以让解释器通过给出的关键字来匹配参数的值,这样可以允许参数缺失或不按定义函数时的形式参数顺序提供实际参数,例子如下:
def select(x, y):
print('让',x,'年级',y,'班的学生打扫卫生')
select(3,6)
select(x=3,y=6)
select(y=6,x=3)
同样的,在函数的定义中可以先设置默认值,如果函数在后续操作中没有赋予其更多的实值,就输出默认值,示例代码如下:
def f(x,y=3,z=4):
print("x =",x)
print("y =",y)
print("z =",z)
f(5)
f(7,19)
函数的参数
不定长参数
如若需要一个函数能处理比当初声明时更多的参数。那就可以使用不定长参数,不定长参数的特征是在变量名前加了星号(*),该变量名会存放所有未命名的变量参数。选择不多传参数也可,其函数引用格式如下
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
其中的“函数_文档字符串”会被认为是函数的说明,使用help(函数名)函数可以显示出来。
示范如下:
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print("输出: ")
print(arg1)
for var in vartuple:
print(var)
return
printinfo(23)
printinfo(23,58,37)
参数类型的影响
在一个函数中对参数名赋值不影响调用者,但改变一个可变的对象参数会影响调用者,如列表,字典,数组等。此外,参数是对象指针,无需定义传递的对象类型,如:
def test(a,b):
return (a+b)
print( test("1","2"))
print( test(1,2))
print( test([1],[2]))
匿名函数
匿名函数就是不显示函数名,其最具代表性的就是利用lambda函数创建小型匿名函数;lambda函数可以接收任何数量的参数但是只能返回一个表达式的值;利用lambda定义的函数拥有自己的名字与空间,且不能访问自有参数列表之外或全局名字空间里的参数,示例如下:
#普通函数的样子
def nor(x,y):
return x**y
print(nor(5,2))
#变成隐藏函数的样子
nor1 = lambda x,y :x**y
print(nor1(5,2))
局部变量和全局变量
- 在一个函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量。
- 在一个文件顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量。
- 如想在局部作用域中改变全局作用域的对象,必须使用global关键字。
例子:
# coding=utf-8
globalInt = 9
#定义一个函数
def myAdd():
localInt = 3
global gi
gi =7
#在函数中定义一个局部变量
return globalInt + localInt
#测试变量的局部性和全局性,如果报错就是局部变量
print(myAdd())
print(globalInt)
print(gi)
print(localInt)