python中形式参数和实际参数_python学习笔记3:函数和参数

函数

函数的参数和返回值

形参(形式参数): 在函数定义的时候用到的参数没有具体值,只是一个占位的符号,成为形参,下例中的peison

实参(实际参数): 在调用函数的时候输入的值:下例中的明月

def hello(person):

print("{0}, 你肿么咧".format(person))

print("Sir, 你不理额额就走咧")

p = "明月"

hello(p)

返回值: 返回函数的执行结果:return

如果没有return,默认返回一个None

函数一旦执行return语句,则无条件返回,函数后面的语句不在执行:下例中aaa不打印,后面的return语句不执行

def hello(person):

print("{0}, 你肿么咧".format(person))

return "哈哈,我提前结束了"

print("aaa")

return "我已经跟{0}打招呼了,{1}不理我".format(person, person)

p = "LiYing"

rst = hello(p)

print(rst)

参数

python参考资料: headfirst python -> 零基础入门学习python(小甲鱼),本讲义参考的是流畅的python-->习题-->后期可以考虑腾讯公开免费课

参数分类

普通参数:name,list

默认参数: name="none",addr="noaddr"

关键字参数:指定参数传输的位置,使用关键字参数,可以不考虑参数位置,多一个变量做中转站: age=a, name=n, addr=addr

收集参数: *args,**kwargs

def stu_key(name="No name", age=0, addr="No addr"):

print("I am a student")

print("我叫 {0}, 我今年 {1}岁了, 我住{2}".format(name, age, addr))

n = "jingjing"

a = 18

addr = "我家"

# 如果是普通参数,只按照位置传递,容易出错

stu_key(age=a, name=n, addr=addr)

收集参数

把没有位置,不能和定义时的参数位置相对应的参数,放入一个特定的数据结构中

语法

def func(*args,**kwargs):

func_body

按照list使用方式访问args得到传入的参数

调用:

func(p1, p2, p3, .....)

参数名args不是必须这么写,但是推荐

收集参数可以和其他参数共存

*args:表示可以使用任意参数,实际是一个tuple

**keyword:把关键字参数按字典格式存入收集参数,类型是dict

def stu( **kwargs):

# 在函数体内对于kwargs的使用不用带星号

print("Hello 大家好,我先自我介绍一下:")

print(type(kwargs))

# 对于字典的访问,python2 和python3有区别

for k,v in kwargs.items():

print(k, "---", v)

stu(name="liuying", age=19, addr="北京大通州区", lover="王晓静", work="Teacher")

stu(name="周大神")

收集参数混合调用的顺序问题

收集参数,关键字参数,普通参数可以混合使用,但要注意参数位置,否则报错

使用规则就是,普通参数和关键字参数优先

定义的时候一般找普通参数,关键字参数,收集参数tuple,收集参数dict

def stu(name, age, *args, hobby="没有", **kwargs):

# 调用的不同格式

stu(name, age)

stu(name, age, hobby="游泳")

stu(name, age, "王晓静", "刘石头", hobby="游泳", hobby2="烹饪", hobby3="跟不同女生聊天")

#以下执行报错

stu(name, age, "王晓静", hobby="游泳", hobby2="烹饪", hobby3="跟不同女生聊天", "刘石头")

收集参数的解包问题

把参数放入list或者字典中,直接把list/dict中的值放入收集参数中

*args用一个*号,**kwargs用两个*号

def stu(*args):

l = ["liuying", 19, 23, "wangxiaojing"]

# 此时,args的表示形式是字典内一个list类型的元素,即 arg = (["liuying", 19, 23, "wangxiaojing"],)

# 很显然跟我们最初的想法违背

# 此时的调用,我们就需要解包符号,即调用的时候前面加一个星号

stu(*l)

传值和传地址的区别

对于简单的数值,采用传值操作,即在函数内对参数的操作不影响外面的变量

对于复杂变量,采用传地址操作,此时函数内的参数和外部变量是同一份内容,

任何地方对此内容的更改都影响另外的变量或参数的使用

函数文档

函数的文档的作用是对当前函数提供使用相关的参考信息

文档的写法:

在函数内部开始的第一行使用三引号字符串定义符

一般具有特定格式

文档查看

使用help函数,形如 help(func)

使用__doc__, 参看案例

def stu(name, age):

'''

这是文档的文字内容

:param name: 表示学生的姓名

:param age: 表示学生的年龄

:return: 此函数没有返回值

'''

pass

print(help(stu))

print("*" * 20)

print(stu.__doc__)

输入结果如下:

Help on function stu in module __main__:

stu(name, age)

这是文档的文字内容

:param name: 表示学生的姓名

:param age: 表示学生的年龄

:return: 此函数没有返回值

None

********************

这是文档的文字内容

:param name: 表示学生的姓名

:param age: 表示学生的年龄

:return: 此函数没有返回值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值