python 函数以及传参

参数组合时,必须按照: 必选参数、默认参数、可变参数、命名关键字参数、关键字参数的顺序使用

技巧

对于任意函数,都可以使用 func(*args, **kw) 的形式调用

*args 是可变参数,args 接收的是一个 tuple
**kw 是关键字参数,kw 接收的是一个 dict


def tt(name, age, *, city='Shanghai', job):
    print('name: ', name, 'age: ', age, 'city: ', city, 'job: ', job)

args = ('alex', 26)
kw = {'city': 'Chongqin', 'job': 'Coder'}
tt(*args, **kw)

默认参数


def tt(name, age=18):
    print(f'the name is {name}')
    print(f'the age is {age}')

tt('alex', 26)

# output
# the name is alex
# the age is 26

多个默认参数时



def tt(name, age=18, gender=1, city='Shanghai'):
    print(f'the name is {name}')
    print(f'the age is {age}')
    print(f'the gender is {gender}')
    print(f'the city is {city}')

tt('alex')
tt('alex', 26, 0, 'Hubei')
tt('alex', 26, 12, city='Chongqing')
tt(city='Hubei', gender=0, name='zhangsan')

可变参数 *(参数的个数不确定)


def cacl(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n
    return sum

# 调用的时候需要先组装成一个 list 或者一个 tuple
res = cacl([1, 2, 3])
res = cacl((1, 2, 3))
print(res)



# 将参数更改为可变参数
def cacl(*numbers):
    print(type(numbers)) # 为一个元组 tuple
    sum = 0
    for n in numbers:
        sum = sum + n
    return sum

# 调用的时候则可以直接传参,不再需要转换成 list 或者 tuple
res = cacl(1, 2, 3)
print(res)

# 如果已经存在了一个 list 或者一个 tuple 时,则只需要将 list 或者 tuple 的元素转变成可变参数传进去即可

numbers = [1, 2, 3]
# 或者 numbers = (1, 2, 3)
res = cacl(*numbers)
print(res)

关键字参数 **



def tt(name, age, **kwargs):
    print('name: ', name, 'age: ', age, 'keywords: ', kwargs)

tt('alex', 26)  # name:  alex age:  26 keywords:  {}
tt('alex', 26, city='Shanghai', job='Coder')  # name:  alex age:  26 keywords:  {'city': 'Shanghai', 'job': 'Coder'}

extra = {'city': 'Shanghai', 'job': 'Coder'}
tt('alex', 26, **extra)  # name:  alex age:  26 keywords:  {'city': 'Shanghai', 'job': 'Coder'}

命名关键字参数


# 只接收 city 和 job 作为关键字参数
def tt(name, age, *, city, job):
    print('name: ', name, 'age: ', age, 'city: ', city, 'job: ', job)

tt('alex', 26, job='Coder', city='Shanghai')

# 或者设置默认值
def tt(name, age, *, city='Shanghai', job):
    print('name: ', name, 'age: ', age, 'city: ', city, 'job: ', job)

tt('alex', 26, job='Coder')

函数多个返回结果


def demage(skill1, skill2):
    damage1 = skill1 * 3
    damage2 = skill2 * 2 + 10
    return damage1,damage2


# 返回结果类型为tuple
print(type(demage(1, 2)))   

# 序列解包的方式接受返回值
skill1_demage, skill2_demage = demage(1, 2) 
print(skill1_demage, skill2_demage)

results matching ""

    No results matching ""