Python的函数

1、函数

  1、函数的定义, 函数名, 函数体以及函数的调用

#我们使⽤用def关键字来定义函数, 函数的定义语法:
def
函数名(): 函数体

#函数的调用: 使用函数名可以调用函数, 写法: 函数名(), 这个时候函数的函数体会被执行

  2、函数的返回

#执行完函数之后. 我们可以使用return来返回结果.函数中return的使用:

#函数中遇到return, 此函数结束, 不再继续执行
def func():
    return
    print("哈哈") # 这句话不会被执行
func()

#给函数的调用者一个访问结果
def func():
    return "美女"
girl = func()
print(girl) # 美女

#函数的返回值可以有多个结果
def func():
    return "美女一枚", "萝莉一枚"
girl = func()
print(type(girl)) # tuple

  3、传参

1. 形参
写在函数声明的位置的变量叫形参. 形式上的一个完整. 表示这个函数需要xxx
2. 实参
在函数调用的时候给函数传递的值. 叫实参, 实际执行的时候给函数传递的信息. 表示给函数xxx
3. 传参
给函数传递信息的时候将实际参数交给形式参数的过程被称为传参.

 def yue(chat): # chat 形参
   print("拿出手机")
 yue("QQ") # 实参
 len("微信") # "字符串"在这里就是实参
 print("无敌哦") # "无敌哦"就是实参

  4、位置参数、关键字参数和混合参数

    4.1、位置参数

def yue(chat, address, age): # 形参
    print("拿出大哥大")
yue("微信", "北京", 18) # 实参

    4.2、关键字参数

def yue(chat, address, age):
    print("拿出手机")
yue(chat="微信", age=18, address="北京") # 关键字参数

    4.3、混合参数

# 混合参数
yue("微信", age=18, address="上海") # 正确.第一个位置赋值给chat, 后面的参数开始指定关键字
#注意: 在使用混合参数的时候, 关键字参数必须在位置参数后面

  5、默认值参数

#默认值参数. 在函数声明的时候, 就可以给出函数参数的默认值. 在调用的时候可以给出具体的值, 也可以不给值, 使⽤默认值

def stu_info(name, age, sex=''):
    print("录⼊入学⽣生信息")
stu_info("张强强", 18)

2、动态传参

  1、如果我们需要给一个函数传参, 而参数又是不确定的. 或者我给一个函数传很多参数, 我的形参就要写很多, 很麻烦, 怎么办呢. 我们可以考虑使用动态参数.

#在参数位置编写*表⽰示接收任意内容
def chi(*food):
    print("我要吃", food)
chi("⼤米饭", "⼩米饭")
#结果:我要吃 ('⼤米饭', '⼩米饭') # 多个参数传递进去. 收到的内容是元组tuple
#动态接收参数的时候要注意: 动态参数必须在位置参数后面
#顺序: 位置参数, 动态参数*, 默认值参数

  2、动态接收关键字参数,在python中可以动态的位置参数, 但是*这种情况只能接收位置参数无法接收关键字参数,在python中使用**来接收动态关键字参数

def func(**kwargs):
    print(kwargs)
func(a=1, b=2, c=3)
func(a=1, b=2)
#结果:{'a': 1, 'b': 2, 'c': 3} {'a': 1, 'b': 2},这个时候接收的是⼀一个dict
#最终顺序(*):
#位置参数 > *args > 默认值参数 > **kwargs

  3、聚合和打散

#在实参位置上给一个序列,列表,可迭代对象前面加个*表示把这个序列按顺序打散.在形参的位置上的* 表示把接收到的参数组合成一个元组
#如果是一个字典, 那么也可以打散. 不过需要用两个*
def fun(**kwargs):#聚合
   pass
dic = {'a':1, 'b':2}
fun(**dic)#打散

def fun(*args):#聚合
   pass
fun(*s)#打散

3、命名空间

  1、我们给存放名字和值的关系的空间起一个名字叫: 命名空间. 我们的变量在存储的时候就是存储在这片空间中的

命名空间分类:
1. 全局命名空间--> 我们直接在py文件中, 函数外声明的变量都属于全局命名空间
2. 局部命名空间--> 在函数中声明的变量会放在局部命名空间
3. 内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间

加载顺序:
1. 内置命名空间
2. 全局命名空间
3. 局部命名空间(函数被执行的时候)
取值顺序:
1. 局部命名空间
2. 全局命名空间
3. 内置命名空间

  2、作用域

作用域: 作用域就是作用范围, 按照生效范围来看分为 全局作用域和局部作用域
全局作用域: 包含内置命名空间和全局命名空间. 在整个文件的任何位置都可以使用(遵循从上到下逐行执行). 
局部作用域: 在函数内部可以使用.

  3、我们可以通过globals()函数来查看全局作用域中的内容, 也可以通过locals()来查看局部作用域中的变量和函数信息

  4、global表示. 不再使用局部作用域中的内容了. 而改用全局作用域中的变量

a = 100
def func():
    global a # 加了个global表示不再局部创建这个变量了. 而是直接使用全局的a
    print(a)
func()

  5、nonlocal 表示在局部作用域中, 调用父级命名空间中的变量

def func1():
    a = 20
    def func2():
        nonlocal a
        a = 30
    func2()
func1()    

 

posted @ 2019-07-08 15:12  IT-凯  阅读(137)  评论(0编辑  收藏  举报