Python基础_函数操作

本文详细介绍了Python函数参数的使用,包括位置参数、默认参数、可变位置参数(*args)、可变关键字参数(**kwargs)以及它们的组合用法。通过实例展示了如何定义和调用函数,强调了参数传递的规则和注意事项,帮助读者深入理解Python函数的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

"""
def function_name():
    expressions

使用def 开始函数定义,紧接着是函数名,括号内部为函数的参数,
        内部为函数的 具体功能实现代码,
        如果想要函数有返回值, 在 expressions 中的逻辑代码中用return 返回。
"""

调用

def fun_ma():
    return 12


res = fun_ma()
print(res)  # 12

传参

'传入值不限制类型,但是两个类型相同'


def fun_ma(a, b):
    return a + b


res = fun_ma(1, 2)
# res = fun_ma("!",2) # error  字符串无法和数字相加
print(res)  # 3

默认参数

'默认参数,不能放在飞默认参数之前'
'b要在a之前'


def fun_ma(a, b=2):
    return a + b


'下面这个函数会报错'
'SyntaxError:非默认参数遵循默认参数'
# def fun_ma1(a=1, b):
#     return a + b

res = fun_ma(1)
print(res)

可变参数*

'参数可以是1个或者多个,可以是列表,元祖,字典'
'这些参数会被包含在一个元组里。在可变数量的参数之前,可能会出现零个或多个普通参数。:'
'只能放置最右边的参数'


def fun_ma(a, *b):
    for i in b:
        return a + i

'下面这两个等价,*b会转化为元祖,传递字符串和数字的话'
res1 = fun_ma(1, (2))
res2 = fun_ma(1, 2)
res2 = fun_ma(1, *(2,)) # 这里传参加* 代表元祖
# res2 = fun_ma(1,[2]) # error 列表外是元祖,循环一次无法相加int list 1+([2])
print(res1)  # 3
print(res2,1)  # 3

可变参数**

'参数可以是1个或者多个,可以是列表,元祖,字典'
'这些参数会被包含在一个字典里。在可变数量的参数之前,可能会出现零个或多个普通参数。:'
'这里的传值好像是 (1,a=1,b=3) 使用=连接成字典'


def fun_ma(a, **b):
    for k, v in b.items():
        return a + v


res = fun_ma(1, b=2)  # 3
res = fun_ma(1, c=5, d=4)
res = fun_ma(1, **{"c":5,"d":4})
# res = fun_ma(1, {"b": 2}) # error 不支持这种
print(res)  # 6

单独*

''


def fun_ma(a, *, b=2):
    return a + b


res = fun_ma(1)
# res = fun_ma(1,2)# 这种就会报错, *像是一个占位符
print(res)  # 3

说明

'单独一个*,什么也不带,暂时不知道,就是一个占位符'
'带一个星号(*)参数的函数传入的参数存储为一个元组(tuple)'
'带两个星号(*)参数的函数传入的参数则存储为一个字典(dict),并且再调用是采取a=1,b=2,c=3的形式'

'传入的参数个数不定,所以当与普通参数一同使用时,必须把带星号的参数放在最后'

'函数定义的时候,再函数的参数前面加星号,将传递进来的多个参数转化为一个对象,一个星号转换成元组,两个星号转换成字典,相当于把这些参数收集起来'

'参数前加一个星号,将传递进来的参数放在同一个元组中,该参数的返回值是一个元组'
'参数前两个星号,将传递进来的参数放到同一个字典中,该参数返回值为一个字典'

合计位置参数,*(),**(),

def name_de(name,*age,**ad):

    return name,age,ad

ad = {"北京":"西城区","上海":"安宁区"}
res = name_de("小A",*(18,19),ad = ad) #
print(res) # ('小A', (18, 19), {'ad': {'北京': '西城区', '上海': '安宁区'}})

警告1

ad = {"北京":"西城区","上海":"安宁区"}
res1 = name_de("小A",age = (18,19),ad = ad) #  这种方式 age 会丢失
print(res1) # ('小A', (), {'age': (18, 19), 'ad': {'北京': '西城区', '上海': '安宁区'}})

警告2

ad = {"北京":"西城区","上海":"安宁区"}
res1 = name_de("小A",(18,19),ad = ad) #  这种方式 age 会丢失
print(res1) # ('小A', ((18, 19),), {'ad': {'北京': '西城区', '上海': '安宁区'}})

单*

print("*************")
def name_de2(name,*,ad):

    return name,ad
res1 = name_de2("小A",ad = (18,19))
# res3 = name_de2("小A",(18,19)) # 这种方式会报错,只能用位置参数,即ad = (18,19)

定义函数的源码

# https://docs.python.org/3/glossary.html#term-parameter

"""
范围
函数(或方法)定义中的命名实体,它指定函数可以接受的参数(或在某些情况下,参数)。有五种参数:

'位置或者关键字参数' def adds(a,b);---->adds(1,2), def adds(a,b=None);---->adds(1,2),
positional-or-keyword:指定一个可以按位置或作为关键字参数传递的参数。这是默认类型的参数,例如下面的foo 和bar:
def func(foo, bar=None): ...

'位置参数'def adds(a,b):---->adds(1,2),
positional-only:指定只能由位置提供的参数。仅位置参数可以通过 /在函数定义的参数列表中包含一个字符来定义,例如下面的posonly1和posonly2:
def func(posonly1, posonly2, /, positional_or_keyword): ...

'关键字参数' def adds(a=1,b=2):---->adds(a,b)
keyword-only:指定只能由关键字提供的参数。仅关键字参数可以通过在它们之前的函数定义的参数列表中包含单个var-positional 参数或 bare*来定义,例如下面的kw_only1和 kw_only2:
def func(arg, *, kw_only1, kw_only2): ...

'可变位置参数' def adds(a,*b):---->adds(1,*(1,2))
var-positional:指定可以提供任意序列的位置参数(除了已经被其他参数接受的任何位置参数)。这样的参数可以通过在参数名称前加上 来定义*,例如 下面的args:
def func(*args, **kwargs): ...

'可变关键字参数' def adds(a,*b,**c):---->adds(a,*(1,2),**{1:2})
var-keyword:指定可以提供任意多个关键字参数(除了已被其他参数接受的任何关键字参数)。可以通过在参数名称前加上 来定义这样的参数**,例如上面示例中的kwargs。
参数可以指定可选参数和必需参数,以及一些可选参数的默认值。



"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值