随笔 - 301  文章 - 27  评论 - 8  阅读 - 10万

Python基础-12-函数的参数

 

 

 

 

 

 

 

 

 

函数内部

 

函数外部

 

 

return

 

 

 

 

 

 

 

 

参数的作用:

函数参数的作用是传递数据给函数使用。

在使用的过程中,参数有两种形式:形式参数和实际参数

形参:定义函数时的参数

实参:调用函数时的参数

根据实际参数类型不同,将实际参数传递给形参的方式有两种:值传递和引用传递

值传递:实参为不可变对象,传递给形参后,形参的值改变,实参值不变。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

引用传递:实参为可变对象,传递给形参后,形参的值改变,实参值改变。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

 

#值传递与引用传递
def demo(obj):
    print obj
    obj+=obj

obj1="123456"
demo(obj1)
print "函数调用后obj1:"+obj1

obj2=[1,2,3]
demo(obj2)
print "函数调用后obj2:"+str(obj2)
#结果
123456
函数调用后obj1:123456
[1, 2, 3]
函数调用后obj2:[1, 2, 3, 1, 2, 3]
复制代码

 

二、位置参数、关键字参数、默认参数、可变参数

1.位置参数(必备参数)

函数调用时的数量,位置,参数类型必须和定义时的一致。

2.关键字参数

函数调用时,使用形参的名字=输入的参数值,此时位置可与定义时不一致。

3.默认参数

函数定义时,为参数设置一个默认值,当函数调用时,没有传入这个参数值,直接使用这个默认值。注意:

定义函数时,默认参数必须指向不可变对象;如果指向可变对象,多次调用,可能得到的不是意料之内的结果。

复制代码
复制代码
#默认参数必须指向不可变对象,如果指向可变对象,结果不对

def demo1(obj=[]):
    print obj
    obj.append(1)

def demo2(obj=None):
    if obj==None:
        obj=[]
    print obj
    obj.append(1)

demo1()
demo1()
demo1()

demo2()
demo2()
demo2()
#结果
[]
[1]
[1, 1]
[]
[]
[]
复制代码
复制代码

4.可变参数(不定长参数)

可变参数有两种形式:一种是*args,另一种是**kwargs

*args:这种形式表示接受任意多个实际参数将其放到一个元组中。

**kwargs:这种形式表示接受任意多个实际参数将其放到一个字典中,类似关键字参数

复制代码
复制代码
#可变参数
#*args形式
def demo3(*args):
    print "\n I like coffee:"
    for i in args:
        print i,
#调用形式:可直接传一个tuple
demo3('巴西','土耳其')
#也可以通过list或者tuple的变量传
obj1=['蓝山','摩卡','卡布奇诺']
demo3(*obj1)

#**kwargs形式
def person(name, age, **kw):
    print'\n name:', name, 'age:', age, 'other:', kw
def demo4(**kwargs):
    print "\n name:age"
    for i,j in kwargs.items():
        print i,':',j

#调用:可直接传一个字典
person("Paul",77,sex="male",job="teacher")
#也可以通过字典变量传
obj2={'Mary':23,'HanMeiMei':34,'Lily':12}
demo4(**obj2)
#结果
 I like coffee:
巴西 土耳其 
 I like coffee:
蓝山 摩卡 卡布奇诺 
 name: Paul age: 77 other: {'job': 'teacher', 'sex': 'male'}

 name:age
Lily : 12
Mary : 23
HanMeiMei : 34
复制代码
复制代码

三、参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数组合使用。但是注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、关键字参数。

 

 

 文章出处:https://www.cnblogs.com/josie-xu/p/10455702.html

posted on   寻不到花的蝶  阅读(352)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示