函数相关的内容1. 函数的定义与调⽤
# 1.函数⼀定要遵循先定义后调⽤的原则
#        定义函数的代码⼀定要⽐调⽤函数的代码先执⾏
# 2.函数在定义阶段只检测语法不执⾏代码
# 3.函数体代码只有在调⽤函数的时候才会执⾏
#        调⽤函数的⽅式: 函数名加括号
#      如果有参数则传递参数,如果没有参数,那么就直接括号
# 4.函数名就像变量名⼀样,是指向的是内存中函数体代码所在的位置
# func()
# 报错  name 'func' is not defined
# 定义函数
def func():
print('hello world')
# 调⽤函数
# 就是去内存中到函数体代码并执⾏
func()
2. 函数的分类
# 1.内置函数
#    python解释器提前定义好可以直接调⽤的函数
#      如len、del
#      如何查看代码的内部源码ctrl+⿏标左键
# 2.⾃定义函数
#    ⾃定义函数为程序员⾃⼰编写的函数
#      2.1.⽆参函数
#      2.2.有参函数
#      2.3.空函数
# 1. ⽆参函数:在函数定义阶段,不需要传⼊任何数据,直接进⾏调⽤
# def index():
#    print('python cat')
# 调⽤⽆参函数:括号内也不需要写参数
# index()
# 2. 有参函数:在函数定义阶,需要传⼊数据,那么就在括号内写⼊你需要传⼊参数的个数
# def index(name):
#    print('python cat是我的%s' % (name))
# 调⽤有参函数:在函数调⽤阶段括号内也必须传对应个数的变量值,就像我们给变量名赋值⼀样,需要传变量的值# 3. 空函数:在定义阶段函数体代码,还没有思路进⾏如何编写或者直接⾥⾯不写任何代码时⽤pass或者...占位# def index():
#    pass
"""
空函数感觉⼀点⽤都没有啊但是⾮常有⽤
前期能够通过空函数快速的罗列出程序中⼤致的功能
让程序整体框架清晰空函数⼤量的使⽤在项⽬前期的功能框架搭建
注意:编写⼀套程序
功能也可以看成是函数函数也可以看成是功能
"""
3. 函数的返回值
# 函数的返回值其实就是在调⽤函数之后返回的结果
# 如: 此代码表⽰的是调⽤len函数,并传⼊python cat,然后再将len函数的返回值赋值给res,最后输出res
#    s = 'python cat'
#    res = len(s)
#    print(res)
# 如何获取函数的返回值
字符串和函数是什么
# 变量名 = 函数名(参数)  # 此参数可以有,可以没有
# 如何操作返回值
# 1.当函数体代码没有return关键字的时候
# 返回值是None
def print_python_cat():
print('python cat')
res = print_python_cat()
print(res)
# >>>None
# 2.当函数体代码写了return但是没有跟任何值得时候
# 返回值也是None
def print_python_cat():
print('python cat')
return
res = print_python_cat()
print(res)
# >>>None
# 3.当函数体代码写了return并且跟了数据
# 那么写什么就返回什么
# 如果写的是值那么直接返回值(任意数据类型)
# 如果写的是变量名那么返回变量名指向的值
def print_python_cat(name):
print('python cat')
return name
name = 'python_cat'
res = print_python_cat(name)
print(res)
# python_cat
# 4.return后⾯还可以跟多个值
# 逗号隔开
# 会⾃动组织成元组返回出去后
def print_python_cat():
print('python cat')
return'python_cat', 'python cat'
res = print_python_cat()
print(res)
# python_cat', 'python cat'
# 5. 函数体代码遇到return会⽴刻结束函数运⾏
# 函数体代码⾥⾯写return相当于循环体代码⾥⾯写break
# 遇到了就⽴刻结束函数和循环的执⾏
4. 函数的参数
"""
1.函数的参数可以分为两⼤类
1.函数在定义阶段括号内写的参数我们称之为'形式参数' 简称为>>>:形参
2.函数在调⽤阶段括号内写的参数我们称之为'实际参数' 简称为>>>:实参
2.形参与实参的关系
形参类似于是变量名、实参类似于是变量的值
在调⽤函数的时候传⼊实参会与形参临时绑定
函数运⾏结束之后⾃动解除绑定
"""
def print_python_cat(cat, cat1):  # cat和cat1就是index函数的形参
print(cat, cat1)
print_python_cat('python_cat', 'python cat')  # python_cat和python cat就是print_python_cat函数的实参"""
python_cat会临时绑定给形参cat python cat会临时绑定给形参cat1
函数体代码运⾏期间可以通过形参直接使⽤到实参
函数体代码运⾏完毕之后解除绑定
形参ab处于没有绑定值得状态等待下⼀次函数调⽤传⼊实参进⾏绑定
"""
# index('python_cat', 'python cat')  # python cat和python_cat就是print_python_cat函数的实参
"""
python_cat会临时绑定给形参cat python cat会临时绑定给形参cat1
函数体代码运⾏期间可以通过形参直接使⽤到实参
函数体代码运⾏完毕之后解除绑定
形参ab处于没有绑定值得状态等待下⼀次函数调⽤传⼊实参进⾏绑定
"""
# 1. 位置形参: 在函数定义阶段括号内从左往右依次填写的变量名
def print_python_cat(cat, cat1):  # cat和cat1就是位置形参
pass
# 位置实参在函数调⽤阶段括号内从左往右依次传⼊的真实数据
print_python_cat('python_cat', 'python cat')  # python_cat和python cat就是位置实参
# 位置参数的特征
# 1.位置形参与位置实参在绑定关系的时候就是按照从左往右的顺序依次绑定
# 2.位置形参与位置实参的个数要⼀致多⼀个不⾏少⼀个也不⾏
def print_python_cat(cat, cat1):
print(cat, cat1)  # 外界传⼊什么实参这⾥就打印什么
# print_python_cat()  # 调⽤的时候不传实参不可以
# print_python_cat(111)  # 传少了也不⾏
print_python_cat(111, 222, 333)  # 传多了也不⾏
# 2.关键字形参:出现在实参中指名道姓的给形参传值不需要遵循位置
def print_python_cat(cat,cat1):
print(cat, cat1)
print_python_cat(cat=111, cat1=222)  # 指名道姓的说形参a接收数据222 b接收数据111    print_python_cat(cat=333,222)  # 报错关键字参数必须放在位置参数的后⾯
print_python_cat(222,cat=111)  # 报错形参只能指向⼀个实参
print_python_cat(222,cat1=111)  # 可以相当于位置参数
"""
实参222会按照位置绑定给形参a 然后⼜通过关键字参数给形参a重复绑值
这种情况是不被允许的
"""
5. 默认参数
# 出现在形参中
# 在函数定义阶段就已经给⼀些形参赋值了
#    后续如果不传值则使⽤默认的
#  后续如果传值则使⽤传⼊的
# 默认参数的出现也打破了形参与实参之间个数⼀致的情况
# 默认参数必须定义在位置参数的后⾯  # ⾄于顺序问题后⾯有⼝诀
"""
默认参数的实际案例
eg:很多软件的注册页⾯默认会帮助我们勾选⼀些选项
默认头像
如果男孩⼦喜欢使⽤的软件默认性别可能是男性
如果⼥孩⼦喜欢使⽤的软件默认性别可能是⼥性
"""
def register(name, age, gender='猛男'):
"""
函数的形参在命名的时候也应该见名知意
"""
print("""
学员姓名:%s
学员年龄:%s
学员性别:%s
""" % (name, age, gender))
register('jason', 18)  # 不传就使⽤默认的
register('kevin', 28)
register('jerry',22,'美⼥')  # 传了就使⽤⾃⼰的
可变长形参
6. 可变长参数与
可变长参数与可变长形参
# 1.
"""需求:定义⼀个函数⽆论传多少位置实参都可以正常执⾏"""
def print_python_cat(*args):
print(args)
print_python_cat()  # ()
print_python_cat(1, 2)  # (1, 2)
print_python_cat(1, 2, 3, 4, 5, 6)  # (1, 2, 3, 4, 5, 6)
"""
*号在形参中
可以接收多余的位置参数并组织成元组的形式赋值给*号后⾯的变量名
"""
def print_python_cat(a, b, *args):
print(a, b, args)
print_python_cat(999)
# 会报错因为形参ab的存在意味着index最少要给两个参数
print_python_cat(1, 2)
# 1 2 ()
print_python_cat(1, 2, 3, 4, 5, 6, 7)
# 1 2 (3, 4, 5, 6, 7)
print_python_cat(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# 1 2 (3, 4, 5, 6, 7, 8, 9, 10)
# 结合print⽅法理解*号的含义暂时不要管self形参
"""
**在形参中
⽤于接收多余的关键字参数并且组织成字典的形式赋值给**后⾯的变量名
"""
def print_python_cat(a, b, **kwargs):
print(a, b, kwargs)
print_python_cat(a=1, b=2)  # 1 2 {}
print_python_cat(a=1, b=2, c=3, name='python_cat')
# 1 2 {'c': 3, 'name': 'python_cat'}
print_python_cat(1, 2, name='python_cat', age=18, pwd='python cat')
# 1 2 {'name': 'python_cat', 'age': 18, 'pwd': 'python cat'}
'''需求:定义⼀个函数⽆论传⼊多少关键字参数都可以正常执⾏'''
def print_python_cat(**kwargs):
print(kwargs)
print_python_cat()
# {}
print_python_cat(a=1, b=2)
# {'a': 1, 'b': 2}
print_python_cat(a=1, b=2, c=3, d=4)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 2. 可变长形参
"""
思考题:如何定义⼀个⽆论接收多少个任意类型的参数都可以正常执⾏的函数
"""
def print_python_cat(*args, **kwargs):
print(args, kwargs)
print_python_cat()  # () {}
print_python_cat(1, 2, 3, 4, name='python_cat', age=18)
# (1, 2, 3, 4) {'name': 'python_cat', 'age': 18}
# 以后在定义函数的时候如果不确定这个函数将来需要多个实参那么可以采⽤上述的⽅法
"""*和**在形参中的使⽤后⾯的变量名并不是关键但是针对这两个特殊符号后⾯的变量名有推荐的写法""" def print_python_cat(*args, **kwargs):
pass
7. 补充说明
# *和**不单单可以在形参中使⽤还可以在实参中使⽤
def print_python_cat(*args, **kwargs):
print(args, kwargs)
"""
*号在实参中
可以将列表或者元组打散成位置参数⼀⼀传⼊
def print_python_cat(*[11,22,33])  等价于 print_python_cat(11,22,33)
def print_python_cat(*(11,22,33))  等价于 print_python_cat(11,22,33)
如果真的理解不了可以看成是*号会将列表和元组的括号去除暴露出⾥⾯⼀个个元素
"""
print_python_cat(*['python_cat', 'kevin', 'tony', 'oscar', 'jerry'])
# ('python_cat', 'kevin', 'tony', 'oscar', 'jerry') {}
print_python_cat(*('python_cat', 'kevin', 'tony', 'oscar', 'jerry'))
# ('python_cat', 'kevin', 'tony', 'oscar', 'jerry') {}
print_python_cat(['python_cat', 'kevin', 'tony', 'oscar', 'jerry'])
# (['python_cat', 'kevin', 'tony', 'oscar', 'jerry'],) {}
print(*[1, 2, 3])
# print(1,2,3)
"""
**号在实参中
可以将字典打散成关键字参数⼀⼀传⼊
def index(**{'name':'jason'})  等价于  index(name='jason')
"""
print_python_cat(**{'name': 'python_cat', 'age': 18, 'pwd': 'python cat'})
# () {'name': 'python_cat', 'age': 18, 'pwd': 'python cat'}
print_python_cat({'name': 'python_cat', 'age': 18, 'pwd': 'python cat'})
# ({'name': 'python_cat', 'age': 18, 'pwd': 'python cat'},) {}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。