设为首页 加入收藏

TOP

百万年薪python之路 -- day10 -- 函数的动态参数(二)
2019-08-04 00:19:46 】 浏览:72
Tags:百万年薪 python 之路 day10 函数 动态 参数
?).

   局部作用域: 在函数内部可以使用.

作?域命名空间:

  1. 全局作用域: 全局命名空间 + 内置命名空间
  2. 局部作用域: 局部命名空间

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

a = 10
def func():   
    a = 40   
    b = 20   
    print("哈哈")   
    print(a, b)        
    print(globals())    # 打印全局作用域中的内容   
    print(locals())     # 打印当前作用域中的内容
func()

4.函数嵌套

  1. 只要遇见?()就是函数的调用. 如果没有()就不是函数的调用
  2. 函数的执?顺序
def fun1():   
    print(111)  
def fun2():   
    print(222)   
    fun1()   
fun2()
print(111)

1548388589142

def fun2():   
    print(222)   
    def fun3():       
        print(666)   
    print(444)   
    fun3()   
    print(888)
print(33)
fun2()
print(555)

1548388743478

5.global nonlocal (很重要)

首先我们写这样一个代码, 首先在全局声明一个变?, 然后再局部调用这个变?, 并改变这 个变?的值

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

结果:
100
28

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

2.1global 宗旨

在函数内部修改全局的变量,如果全局中不存在就创建一个变量

lst = ["周道镕", "章超印", "杨红兴"]
def func():   
    lst.append("朱凡宇")   
    # 对于可变数据类型可以直接进行访问
   print(lst)
func()
print(lst)

2.2 nonlocal宗旨

nonlocal 只修改上一层变量,如果上一层中没有变量就往上找一层,只会找到函数的最外层,不会找到全局进行修改

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


结果:
加?nonlocal
30
30

?加nonlocal
30
20

再看, 如果嵌套?很多层, 会是一种什么效果:

a = 1
def fun_1():   
    a = 2   
    def fun_2():       
        nonlocal a       
        a = 3       
        def fun_3():           
            a = 4           
            print(a)       
        print(a)       
        fun_3()       
        print(a)   
    print(a)   
    fun_2()   
    print(a)
print(a)
fun_1()
print(a)
# 这样的程序如果能分析明白. 那么作用域, global, nonlocal就没问题?

globals()和locals()

locals() 返回是当前局部变量的深拷贝,修改locals() 中变量值的时候,实际上对于原变量本身是没有任何影响的。而globals()返回的是全局变量的字典,修改其中的内容,值会真正的发生改变。

6.其他

三元运算符
a = 10
b = 30
c = a if a > b else b
print(c)

结果:
30

enumerate() #枚举
lst = [11,22,33,44,55,66]
for i,j in enumerate(lst):
    print(i,j)
    
结果:
0 11
1 22
2 33
3 44
4 55
5 66



元组和字典打散:
tu = (1,2,3,4,5,6)
dic = {1:2,2:4}
print(*tu)
print(*dic)

结果:
1 2 3 4 5 6
1 2

一日总结:

# 1.函数的动态参数
# *args,**kwargs (能够接受动态的位置参数和动态的关键字参数)
# 定义阶段(*args,**kwargs) 聚合
#     *args -  tuple
#     **kwargs -- dict
# 使用阶段*args,*kwargs 打散
#     *args - 源数据类型
#     *kwargs - 打散是字典的键
# 优先级: 位置 > 动态位置> 默认 > 动态关键字

# lst = [12,23,3,4,5,6]
# def func(*args):
#     print(*args)
# func(lst[0],lst[1]) # 笨的办法
# func(*lst)

# dic = {"key":1,"key1":34}
# def func(**kwargs):
#     print(kwargs)
# func(**dic)

# 2.函数的注释
"""
每次写函数的时候需要写注释
函数名.__doc__
函数名.__name__
"""

# 3.名称空间
# 内置空间: python解释器自带的
# 全局空间:当前文件(.py文件)
# 局部空间:函数体开辟的空间

# 加载顺序: 内置 > 全局> 局部
# 取值顺序: 局部 > 全局 > 内置

# 作用域:
# 全局作用域 内置 + 全局
# 局部作用域: 局部

# 4.函数嵌套
# 函数中套函数
# 函数嵌套调用
# 函数嵌套参数的传递
# 函数嵌套返回值的传递

# 5.global nonlocal
# global : 修改全局空间的变量对应的值
# nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,
# 只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数

# 6.三元运算符
# a = 10
# b = 20
# c = a if a> b else b
# 变量名 = 条件成立的结果 条件 条件不成立的结果
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇django修改表数据结构后报错的解.. 下一篇Python 数据结构理解分享

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目