Python函数参数传递,返回值

文章目录

    • 位置实参传递,即一对一传递,传递顺序不能乱
    • 关键字实参传递,f(arg1=...,arg2=...,...)
    • 默认值,传递
    • 传递任意数量的实参
    • 使用任意数量的关键字实参
    • 返回值 返回字典
    • 传递列表,可以在函数中修改列表,以及如何保持列表不改变

定义: def function_name(args[]):
blocks

#定义一个函数,输出某个人的年龄
def f(name,age):
    print(name+" is "+str(age)+" years old")

位置实参传递,即一对一传递,传递顺序不能乱

f('Zhang',18)
Zhang is 18 years old

关键字实参传递,f(arg1=…,arg2=…,…)

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']

你可能感兴趣的:(Python)