函数简介
函数定义以 def 开头,后面是函数名和函数参数 函数不用指定返回值,直接在函数体中用 return 返回一个结果,或者直接 return 什么都不返回
def add ( num) :
return num + 1
参数传递
Python 函数的参数,如果是数、字符串、元组等不可变的变量,并不会在函数体外影响他们。 如果参数是可变的数据结构(如列表),则修改时有可能改变函数外的变量:
def change ( n) :
n[ 0 ] = 'Steven'
names = [ 'Tom' , 'Jerry' ]
change( names)
要避免这样的结果,必须创建列表的副本。 对序列进行切片操作时,返回的都是副本,即指向的不是同一个数据 将上述调用函数稍微修改即可:
change( names[ : ] )
关键字参数和默认值
def Hello ( greeting, name) :
print ( '{},{}!' . format ( greeting, name) )
Hello( name = 'Jerry' , greeting = 'Hello' )
def Hello ( greeting = 'Hello' , 'name = ' Jerry')
这样的好处就是可以忽略参数的位置关系,参数的顺序可以变化 普通方法(位置参数)和关键字参数可以混用,但是要先指定位置参数,也不建议这么做。
收集参数
在参数前面加一个 * 表示此参数会收集输入的其他参数,并放入元胞数组中,如下所示:
def test ( x, y, * z) :
print ( x, y, z)
test( 1 , 2 , 3 , 4 , "hhh" )
带 * 的参数可以放在中间位置,但是其后的参数必须以关键字名称方式指定。 带 * 参数不能接受关键字指定的参数,如果要用关键字指定收集,可以加两个 * 则以字典的方式收集。
def test ( ** x) :
print ( x)
test( x= 1 , y= 2 , z= 3 )
def test ( x, y, * z, ** p) :
print ( x, y, z, p)
test( 1 , 2 , 3 , 4 , 5 , a= 1 , b= 2 )
作用域
我们都知道函数有自己的作用域,可以在函数中用 global 访问全局变量: 用 global 声明参数,或者用 globals()[‘name’] 表示全局变量
x = 1 ;
def changeGlobal ( ) :
global x
x = x + 1
changeGlobal( ) ;
def combine ( parameter) :
print ( parameter + globals ( ) [ 'parameter' ] )
parameter = 'Jerry'
combine( 'Tom' )