关键字参数和默认值
def hello_l(greeting, name):
print('%s , %s!'%(greeting,name))
hello_l('Hello','world')#位置参数
hello_l(greeting='Hello',name='world')#关键字参数
输出:
Hello , world!
Hello , world!
例如,hello函数可能需要名字作为参数,但是也允许用户定义自己的名字,问候语和标点:
代码实现:
def hell_q(name,greeting='Hello',punctuation='!'):
print('%s,%s%s'%(name,greeting,punctuation))
hell_q('Mars')
hell_q('Mars','Howdy')
hell_q('Mars','Howdy','...')
hell_q('Mars',punctuation='')
hell_q('Mars',greeting='Top of the morning to ya')
输出:
Mars,Hello!
Mars,Howdy!
Mars,Howdy...
Mars,Hello
Mars,Top of the morning to ya!
收集参数
让用户提供任意数量的参数:
例如能像下面这样存储多个名字:
store (data, name1,name2,name3)
给用户提供任意多的参数,可以像下面这样定义函数:
def print_params(*params):#参数前的星号将所有值放置在同一个元组中。(收集其余的位置元素)
print(params)
print_params('Testing')
print_params(1,2,3)
输出:
('Testing',)#结果作为元组打印出来
(1, 2, 3)
处理关键字参数的时候,用“**”
代码:
def hih(**p):
print(p)
hih(x=1,y=3,z=2)
输出:
{'x': 1, 'y': 3, 'z': 2}#可以看出输出的是一个字典而不是元组
作用域
变量可以看做是值的名字。在执行x=1赋值语句后,名称x引用到值1。这就像用字典一样,键引用值,变量和所对应的值用的是个“不可见”的字典。内建的Vars函数可以返回这个字典:
x=1
scope=vars()
print(scope['x'])
scope['x']+=1
print(x)
输出:
1
2
警告:一般来说,vars所返回的字典是不能修改的。
这类“不可见字典”叫做命名空间或者作用域。
函数内部的变量称为局部变量,函数外的变量称为全局变量。
嵌套作用域
Python函数是可以嵌套的,也就是说将一个函数放在另一个里面。