#定义一个函数,输出某个人的年龄
def f(name,age):
print(name+" is "+str(age)+" years old")
f('Zhang',18)
Zhang is 18 years old
f(age=18,name='Zhang') #位置顺序可以改变,但是必须准确的写出函数中的形参名
Zhang is 18 years old
将默认的排在后面,因为默认参数传递也是按位置顺序传递
def f(name,age=18):
print(name+" is "+str(age)+" years old")
f('Zhang')
Zhang is 18 years old
def f(age=18,name):
print(name+" is "+str(age)+" years old")
f(name='Zhang')#因为是按位置顺序传递所以不能按关键字使用
File "", line 1
def f(age=18,name):
^
SyntaxError: non-default argument follows default argument
*比如一个人,他有很多兴趣,无法确定他有多少个兴趣,可以使用这种传递方式,f(arg1,…,args)
def person(name, *interestings):
print(name+"'s interestings are")
for interesting in interestings:
print(interesting)
person('Ross','basketball','swimming','reading')
Ross's interestings are
basketball
swimming
reading
有的时候需要接受任意数量的实参,但是预先不知道是什么样的信息,这个时候可以将函数编写成能够接受任意数量的键-值对的函数
def bulid_profile(name,**args):
profile={'name':name}
for k,v in args.items():
profile[k] = v
return profile
profile = bulid_profile('einstein',location='princrton',field = 'physics')
print(profile)
{'name': 'einstein', 'location': 'princrton', 'field': 'physics'}
def f(first_name,last_name):
person={'first_name':first_name,'last_name':last_name}
return person
person = f('Zhang','Xs')
print(person)
{'first_name': 'Zhang', 'last_name': 'Xs'}
#是否忘了冒号
#动态创建字典,返回字典
def f(keys,values):
person={}
if len(keys) == len(values):
for i in range(len(keys)):
person[keys[i]]=values[i]
return person
print(f(['first','second','third'],[1,2,3]))
{'first': 1, 'second': 2, 'third': 3}
def f(animals):
animals.sort()
print(animals)
animals = ['panda','cat','dog','tiger']
f(animals)
print(animals)#顺序已经改变,列表已经修改
['cat', 'dog', 'panda', 'tiger']
['cat', 'dog', 'panda', 'tiger']
有时候我们并不希望传递的列表被修改,这个时候我们可以选择传递列表的副本,list[:]
def f(animals):
animals.sort()
print(animals)
animals = ['panda','cat','dog','tiger']
f(animals[:])#****
print(animals)#可以看出列表并没有真的被修改
['cat', 'dog', 'panda', 'tiger']
['panda', 'cat', 'dog', 'tiger']