python中的参数与变量

1, 形参与实参以及位置参数

位置参数:

默认情况:我们定义函数max(a,b)后,在调用时,我们无需指定参数名,只需max(1,9),这个时候实参入参的 的位置进行匹配,也就是在函数中,a=1,b=9.。
指定情况:当然,如果我们不想基于位置顺序,也可以直接指定对应的参数名,比如max(b=9,a=1),这个时候 调用后,不会按入参顺序赋值,而是直接按指定的参数名赋值。

2, 默认参数

def power(x, n=2):
return x ** n
print(power(2))

这里的x=2就是默认参数,必须要注意: 默认参数在后,否则会报错 !!!

一,当全部为默认参数时:

def test(a=1, b=2, c=3):
    print("a=%d b=%d c=%d" % (a, b, c))
test(c=2)
结果
a=1 b=2 c=2

即:c的值最终还是由调入时传入的参数决定

二,默认参数为一个列表时

def test(L=[]):#空的列表
   L.append("END")
   print(L)
test([1, 1, 1])#给列表赋值
test([2, 2, 2])
结果
[1, 1, 1, 'END']
[2, 2, 2, 'END']

说明: 默认参数必须指向不可变对象

默认参数应该是不可变对象(如整数、浮点数、字符串、元组等),而不是可变对象(如列表、字典等)。这是因为函数的默认参数在函数定义时就会被计算出来,并且在每次函数调用时都会使用同一个默认参数对象。
如果默认参数是可变对象,当你在函数内部修改了默认参数的值,这个改变会在下次函数调用时持续存在,可能会导致意外的行为。

def test(L=[]):
   L.append("END")
   print(L)
test()#默认参数已经改变了
test()#接着上一个test()
结果
['END']
['END', 'END']

3, 可变参数 (类型可变)

其他方式:

如果不使用可变参数,目前有哪些方式可以实现传入不确定个数的 list(列表)、dict(字典)、set(集合)等

def sum_(list_):
    total=sum(list_)
    return total
a=sum_([1,2,3,4])
print(a)
结果
10

下面介绍可变参数:实际上是转化为元组

def print_args(*args):
    for arg in args:
        print(arg)

print_args(1, 2, 3)  # 输出:1 2 3
print_args("apple", "banana")  # 输出:apple banana

4, 命名关键字参数

说明:入参方式

1)位置参数
2)关键字参数
3)命名关键字参数:
在调用函数时,必须使用参数名来传递命名关键字参数的值,而不能像位置参数一样只使用位置来传递。
使用方法:
命名关键字使用*做分隔,*之前的参数,基于位置参数,后面的参数,在调用的时候必需指定其参数 名
def greet(name,age,
,city):
greet(‘kaiwen’,20,city=‘shanghai’)

def greet(name,age,*,city):
    print(f'hello,{name}!you are {age} years old and from {city}')
greet('kaiwen',20,city='shanghai')
结果
hello,kaiwen!you are 20 years old and from shanghai

*后面的参数,同样也可以使用默认参数进行设置

def greet(name,age,*,city='shanghai'):
    print(f'hello,{name}!you are {age} years old and from {city}')
greet('kaiwen',20)
结果
hello,kaiwen!you are 20 years old and from shanghai

说明:如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分 隔符 /
def example(arg1, *args, kwarg1, kwarg2):
    print("arg1:", arg1)
    print("args:", args)
    print("kwarg1:", kwarg1)
    print("kwarg2:", kwarg2)

example(1, 2, 3, kwarg1="A", kwarg2="B")
结果
arg1: 1
args: (2, 3)
kwarg1: A
kwarg2: B

在这个示例中,函数 example 中的参数包括一个位置参数 arg1 和一个可变参数 args,以及两个命名关键字参数 kwarg1 和 kwarg2。由于存在可变参数 args,后面的命名关键字参数 kwarg1 和 kwarg2 就不需要特殊的分隔符(*)来区分。在函数调用时,你可以通过关键字传递来指定命名关键字参数的值。

5, 关键字参数

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个 dict(字典).
即一个关键字参数 **kw 可包括多个参数 city=“广州”,pet="cat ,用户想要啥就写啥

def person(name,age,**kw):
    print(f'name:{name},age:{age},other:{kw}')
person1=person('lily',20,city='beijing',pet='dog')
结果
name:lily,age:20,other:{'city': 'beijing', 'pet': 'dog'}#kw部分写成了字典

在这个例子中,person 函数定义了两个位置参数 name 和 age,以及一个可变数量的关键字参数 **kw。当你调用函数时,你可以通过关键字参数的方式传递额外的参数。这些额外的关键字参数会被捕获到一个字典中,字典的名称与定义的参数名 kw 相同。
在你的调用中,city=“广州” 和 pet=“cat” 都是额外的关键字参数。这些参数会被捕获到 kw 字典中,然后在函数内部被输出。这种用法允许你在调用函数时,灵活地传递任意数量的关键字参数,并在函数内部进行处理。

def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
other_info = {"pet": "cat"}
person("wiggin",29,city="广州",**other_info)

说明:混合使用参数

混合使用时,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参 数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值