一、函数
1、函数
2、函数返回值
3、函数的参数和返回值
4、return案例
5、函数文档
二、参数
1、默认参数
2、关键字参数
3、普通参数,只按照位置传递,容易出错
4、收集参数概念
5、收集参数之关键字收集参数
6、收集参数混合调用的顺序问题
7、收集参数的解包问题
一、函数
1、函数
def func():
print("我是一个函数")
print("我要完成一定功能")
func()
print("我结束了")
'''
我是一个函数
我要完成一定功能
我结束了
'''
2、函数返回值
1、函数和过程的区别
有无返回值
2、需要用return显示返回内容
3、如果没有返回,则默认返回None
4、有无返回值都要以return结束
def func_1():
print("有返回值呀")
return 1
def func_2():
print("没有返回值")
f1 = func_1()
print(f1)
'''
有返回值呀
1
'''
f2 = func_2()
print(f2)
'''
没有返回值
None
'''
3、函数的参数和返回值
写一个hello打招呼函数
def hello(person):
print("{0},你肿么啦".format(person))
print("{0},你怎么不理我就走了啊".format(person))
return "我已经跟{0}打招呼了,{1}不理我".format(person,person)
p = "明月"
rst = hello(p)
print(rst)
'''
明月,你肿么啦
明月,你怎么不理我就走了啊
我已经跟明月打招呼了,明月不理我
'''
4、return案例
def hello(person):
print("{0},你肿么啦".format(person))
return "哈哈,我提前结束了"
print("Sir,你不理我我就走啦")
return "我已经跟{0}打招呼了,{1}不理我".format(person,person)
p = "LiYang"
res = hello(p)
print(res)
'''
LiYang,你肿么啦
哈哈,我提前结束了
'''
return以后后面的就不执行了
5、函数文档
函数文档的作用是对当前函数提供使用相关的参考信息
文档的写法:
在函数内部开始的第一行使用三字符串定义符
一般具有特定格式
参看案例
文档的查看:
使用help函数,例如help(func)
使用doc
def stu(name,age,*args):
'这是文档'
print("This is hanshu stu")
#查看函数文档
help(stu)
stu.__doc__
二、参数
1、默认参数
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 = "xiaoming"
a = 18
addr = "我家"
stu_key(age = a, name = n,addr = addr)
'''
I am a student
我叫xiaoming,我今年18岁了,我住我家
'''
默认参数案例
报名函数,需要知道学生性别
如不指定,我们默认为男生
def reg(name,age,gender="male"):
if gender == "male":
print("{0} is {1},and he is a good student".format(name,age))
else:
print("{0} is {1},and she is a good student".format(name,age))
reg("mingyue",21)
reg("xiaoxin",23,"female")
'''
mingyue is 21,and he is a good student
xiaoxin is 23,and she is a good student
'''
2、关键字参数
def stu(name,age,addr):
print("I am a student")
print("我叫{0},我今年{1}岁了,我住{2}".format(name,age,addr))
n = "xiaoming"
a = 18
addr = "我家"
3、普通参数,只按照位置传递,容易出错
stu(a,n,addr)
'''
I am a student
我叫18,我今年xiaoming岁了,我住我家
'''
4、收集参数概念
把没有位置,不能和定义时的参数位置相对应的参数,放入一个特定的数据结构中
语法
def func(*args):
func body
按照list使用方式访问args得到传入的参数
#调用:
func(p1,p2,p3...)
参数名args不是必须要命名为args,但一般都是用这个 注意参数名args前有*号 收集参数可以和其他参数共存
#函数模拟一个学生进行自我介绍,但具体内容不清楚
#args看作一个list
def stu(*args):
print("Hello 大家好,我自我介绍一下,简答说两句: ")
#type函数作用是检测变量的类型
print(type(args))
for item in args:
print(item)
stu("xiaoming",18,"北京","mengmeng","single")
'''
Hello 大家好,我自我介绍一下,简答说两句:
<class 'tuple'> #表示元组类型(类似于数组)
xiaoming
18
北京
mengmeng
single
Hello
'''
stu("周大神")
'''
大家好,我自我介绍一下,简答说两句:
<class 'tuple'>
周大神
'''
#以上两次调用表明tuple可变
stu()
'''
Hello 大家好,我自我介绍一下,简答说两句:
<class 'tuple'> #空tuple
'''
5、收集参数之关键字收集参数
把关键字参数按字典格式存入收集参数
语法
def func(**kwargs):
func_body
#调用:
func(p1=v1,p2=v2,p3=v3...)
kwargs一般约定俗成
调用的时候,把多余的关键字参数放入kwargs
访问kwargs需要按字典格式访问
def func(**kwargs):
print("Hello 大家好,我自我介绍一下,简答说两句: ")
#在函数体内对于kwargs的使用不用带星号
print(type(kwargs))
#对于字典的访问,python2和python3有区别
for k,v in kwargs.items():
print(k,"~~~~~",v)
'''
stu(name="xiaoming",age=19,addr="北京",lover="daming",work="teacher")
print("*" * 50) #多个星号的输出
stu(name="周大神")
'''
6、收集参数混合调用的顺序问题
1、收集参数,关键字参数,普通参数可以混合使用
2、使用规则:普通参数和关键字参数优先
3、定义的时候一般找普通参数,关键字参数,收集参数tuple,收集参数dict
#收集参数混合调用案例
#stu模拟一个学生的自我介绍
def stu(name,age,*args,hobby="没有",**kwargs):
print("hello大家好")
print("我叫{0},我今年{1}岁了".format(name,age))
if hobby == "没有":
print("我没有爱好")
else:
print("我的爱好{0}".format(hobby))
print("*" * 20)
for i in args:
print(i)
print("#" * 20)
for k,v in kwargs.items():
print(k,"~~~",v)
#开始调用函数
name = "liuying"
age = 19
#调用不同格式
stu(name,age)
stu(name,age,hobby="游泳")
stu(name,age,"王晓静","刘石头",hobby="游泳",hobby2="烹饪",hobby3="跟不同女生聊天")
'''
hello大家好
我叫liuying,我今年19岁了
我的爱好游泳
********************
王晓静
刘石头
####################
hobby2 ~~~ 烹饪
hobby3 ~~~ 跟不同女生聊天
'''
7、收集参数的解包问题
把参数放入list或者字典中,直接把list/dict中的值放入收集参数中
语法:看案例
def stu(*args):
print("哈哈哈哈")
# n 用来表示循环次数
# 主要用来测试
n = 0
for i in args:
print(type(i)) #打印类型
print(n)
n += 1
print(i)
stu("liuying","mengmeng",19,200)
l = list()
#先打印哈哈哈,再把stu中的以数组顺序打印类型、数字、stu中的值
'''
#哈哈哈哈
<class 'str'>
0
liuying
<class 'str'>
1
mengmeng
<class 'int'>
2
19
<class 'int'>
3
200
哈哈哈哈
<class 'list'>
0
'''
l.append("liuying")
l.append(20)
l.append(230)
#['liuying', 20, 230]
stu(l)