Python基础语法4 —— 函数

一、函数
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)

猜你喜欢

转载自blog.csdn.net/dyw_666666/article/details/80883634