函数
函数是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数,这就是所谓的调用(calling)函数。我们已经使用了很多内置的函数,例如 len 和 range。
案例(保存为function1.py)
def say_hello(): # 该块属于这一函数 print('hello world') # 函数结束 say_hello() # 调用函数 say_hello() # 再次调用函数
函数参数在定义函数时给定的名称称作“形参”(Parameters),在调用函数时你所提供给函数的值称作“实参”(Arguments)。
案例(保存为function_param.py):
def print_max(a, b): if a > b: print(a, 'is maximum') elif a == b: print(a, 'is equal to', b) else: print(b, 'is maximum') # 直接传递字面值 print_max(3, 4) x = 5 y = 7 # 以参数的形式传递变量 print_max(x, y)
输出:
$ python function_param.py 4 is maximum 7 is maximum
局部变量
当你在一个函数的定义中声明变量时,它们不会以任何方式与身处函数之外但具有相同名称的变量产生关系,也就是说,这些局部变量只存在于函数这一局部(local),这些被称为变量的作用域。变量的作用域是它们被定义的块,从定义它们的名字的定义点开始。
案例(保存为 function_local.py):
x = 50 def func(x): print('x is', x) x = 2 print('Changed local x to', x) func(x) print('x is still', x)
输出:
$ python function_local.py x is 50 Changed local x to 2 x is still 50
global语句
如果你想要给一个程序顶层的变量赋值,那么你必须告诉python这一变量并非局部的,而且全局的(global)。
案例 (保存为 function_global.py):
x = 50 def func(): global x print('x is', x) x = 2 print('Changed global x to', x) func() print('Value of x is', x)
结果为:
$ python function_global.py x is 50 Changed global x to 2 Value of x is 2
默认参数值
对于一些函数来说,你可能希望使一些参数可选并使用默认的值,以避免用户不需为他们提供值得情况。默认参数值可以有效解决这一情况,你可以 通过在函数定义时附加一个赋值运算符(=)来为参数指定默认参数值。要注意,默认参数值应该是常数。更确切的说,默认参数值应该是不可变的。
案例(保存为 function_default.py):
def say(message, times=1): print(message * times) say('Hello') say('World', 5)
输出:
$ python function_default.py
Hello
WorldWorldWorldWorldWorld
关键字参数
如果你有一些具有很多参数的函数,而你又希望只对其中的一些进行指定,那么你可以通过命名它们来给这些参数赋值--这就是关键字参数。
案例(保存为function_keyword.py):
def func(a, b=5, c=10): print('a is', a, 'and b is', b, 'and c is', c) func(3, 7) func(25, c=24) func(c=50, a=100)
输出:
$ python function_keyword.py a is 3 and b is 7 and c is 10 a is 25 and b is 5 and c is 24 a is 100 and b is 5 and c is 50
可变参数
有事你可能想定义的函数里面能够有任意数量的变量,也就是参数数量是可变的,这可以通过使用星号来实现(案例保存为 function_varargs.py):
def total(a=5, *numbers, **phonebook): print('a', a) #遍历元组中的所有项目 for single_item in numbers: print('single_item', single_item) #遍历字典中的所有项目 for first_part, second_part in phonebook.items(): print(first_part,second_part) print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))
输出:
$ python function_varargs.py a 10 single_item 1 single_item 2 single_item 3 Inge 1560 John 2231 Jack 1123 None
有点难理解,慢慢品呵呵
return语句
return语句可以用于从函数中返回,也就是中断函数。我们也可以选择在中断函数时从函数中返回一个值。
案例(保存为 function_return.py):
def maximum(x, y): if x > y: return x elif x == y: return 'The numbers are equal' else: return y print(maximum(2, 3))
输出:
$ python function_return.py 3
要注意到如果return语句没有搭配任何一个值则代表着返回None。None在Python中是一个特殊的类型,代表着虚无。