1.名称空间:

  定义:用来存放名字的(变量,函数名,类名,引入的模块名)

  分类:

    内置名称空间:python解释器提供好的一些内置内容

    全局名称空间:py文件中自己写的变量

    局部名称空间:执行函数时会产生一个局部名称空间,放的是函数内部的内容

2.作用域:

  1.全局作用域:内置 + 全局

  2.局部作用域: 局部

  范围;   内置范围  >   全局  > 局部

  全局不能找局部的变量     局部的变量可以找全局的变量

3.locals和globals

  locals()  :查看当前作用域里面的内容    print(locals())

  globals()  :查看全局作用域里面的内容   print(globals())

  示例

    def print():

      pass

    def func():

      a = 10

      print(a)

    #输出结果是空 :因为第一行print将内置的print改为全局的print,导致在再次调用的时候只会使用全局的print不会使用内置的print

4.关键字  global和nonlocal

  4.1 globale 表示从全局把一个变量(比如a)引入局部,后面的变量全是此变量a

    使用方法:   globale 变量名

# 全局变量一般是不能随意的修改的
# a = 10
# def func():
# # 慎用.
# global a # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量
# a += 10 # a = a + 10 # 现在的a是全局的, 你现在视图改全局变量
# print("里面的打印",a) #20
# func()
# print("外面的打印", a) #20

  4.2 nonlocal  在局部寻找离他最近的外层的一个变量

    使用方法: nonlocal 变量名

a = 50
def func1():
a = 10 # 局部
def func2():
nonlocal a # 不找全局, global找全局
a += 10
print("func2", a) #20
func2()
print(a) #20
func1()
print(a) #50

使用global模拟登陆

flag = False

def login():
global flag
uname = input('输入用户名')
upwd= input('输入密码')
if uname == '李雷'and upwd =='韩梅梅':
flag =True
else:
flag = False def fatie():
if flag =True:
print('可以发帖')
else:
print('去登陆') login()
fatie()

5.闭包

  1.内层函数对外层函数的应用

  2.闭包的优点

    1.可以保护变量不被其他人侵害

    2.保持一个变量常驻内存

def wrapper():
name = "韩梅梅" # 局部变量常驻与内存
def inner():
print(name) # 在内层函数中使用了外层函数的局部变量
return inner # 返回函数名 ret = wrapper() # ret是一个内层函数
ret() # ret是inner, 执行的时机是不确定的, 必须保证里面的name必须存在

  3.__closure__查看是否是闭包. 有内容就是闭包, 没有内容就不是闭包

def wrapper():
name = "韩梅梅"
def inner():
print(name)
print(inner.__closure__) # 查看是否是闭包. 有内容就是闭包, 没有内容就不是闭包
inner() wrapper()

6. 迭代与迭代器

  dir( )   查看xx数据可执行哪些操作   dir( lst )

  数据可执行操作中有__iter__,就是可迭代对象

  获取迭代器      it = lst.__iter__()     it就是迭代器

  获取迭代器里面的一个数据   it.__next__()

  官方通过代码判断是否是迭代器

    from collections import Iterator,Iterable

    print(isinstance(lst , Iterator))   True就是迭代器,False就不是迭代器

    print(isinstance(lst , Iterable)  True就是可迭代的,False就不可迭代

  迭代器都是可迭代的,   可迭代的不一定是迭代器

  迭代器的意义:统一数据类型的遍历工作

#模拟for循环

7.生成器

  生成器本质就是一个迭代器

  函数中包含yield,此函数就是生成器函数

  生成器函数运行之后,是产生一个生成器,而不是运行函数

  yield表示返回,但不会终止函数的执行,是分段的执行函数

  执行生成器函数

       ret = fn()    #ret是创建一个生成器

       ret.__next__()  #生成器拿值 

   能向下执行的两个条件:
       __next__(), 执行到下一个yield
      send(), 执行到下一个yield, 给上一个yield位置传值

    所有的生成器都是迭代器都可以直接使用for循环
    都可以使用list()函数来获取到生成器内所有的数据

7 .  各种推导式 
  列表推导式 [结果 for循环 if条件]
  字典推导式 {结果(k:v) for循环 if条件}
  集合推导式 {结果(k) for循环 if条件}

  元组没有推导式

8 . 生成器表达式 
    (结果 for循环 if条件)

 

python之函数的进阶的更多相关文章

  1. Python之函数的进阶(带参数的装饰器)

    函数篇--装饰器二 带参数的装饰器 def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函 ...

  2. 【转】Python之函数进阶

    [转]Python之函数进阶 本节内容 上一篇中介绍了Python中函数的定义.函数的调用.函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函 ...

  3. 小学生都能学会的python(函数的进阶)

    小学生都能学会的python(函数的进阶) 1. 动态传参 形参: 1. 位置参数 2. 默认值参数 3. 动态传参 *args 动态接收位置参数 **kwargs 动态接收关键字参数 def fun ...

  4. Python之函数进阶

    本节内容 上一篇中介绍了Python中函数的定义.函数的调用.函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函数 内置函数 总结 一.递归函 ...

  5. 十三. Python基础(13)--生成器进阶

    十三. Python基础(13)--生成器进阶 1 ● send()方法 generator.send(value) Resumes the execution, and "sends&qu ...

  6. Python类的继承(进阶5)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6411918.html 本文出自:[Edwin博客园] Python类的继承(进阶5) 1. python中什 ...

  7. python基础篇之进阶

    python基础篇之进阶 参考博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html python种类 1. cpython  使用c解释器生产 ...

  8. Python学习day15-函数进阶(3)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  9. Python学习day14-函数进阶(2)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

随机推荐

  1. 区分 BeanFactory 和 ApplicationContext?

    BeanFactory ApplicationContext 它使用懒加载 它使用即时加载 它使用语法显式提供资源对象 它自己创建和管理资源对象 不支持国际化 支持国际化 不支持基于依赖的注解 支持基 ...

  2. ArrayList 与 LinkedList 的不区别?

    最明显的区别是 ArrrayList 底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构书链表,不支持随机访问.使用下标访问一个元素, ArrayList 的时间复杂度是 O ...

  3. Pandas怎样新增数据列

    Pandas怎样新增数据列? 在进行数据分析时,经常需要按照一定条件创建新的数据列,然后进行进一步分析. 直接赋值 df.apply方法 df.assign方法 按条件选择分组分别赋值 0.读取csv ...

  4. led指示灯电路图大全(八款led指示灯电路设计原理图详解)

    led指示灯电路图大全(八款led指示灯电路设计原理图详解) led指示灯电路图(一) 图1所示电路中只有两个元件,R选用1/6--1/8W碳膜电阻或金属膜电阻,阻值在1--300K之间. Ne为氖泡 ...

  5. JavaScript HTML5脚本编程——“历史状态管理”的注意要点

    历史状态管理是现代Web应用开发中的一个难点.在现代Web应用中,用户的每次操作不一定会打开一个全新的页面,因此"后退"和"前进"按钮也就失去了作用,导致用户很 ...

  6. Win7运行net5 wpf条件

    Win7运行net5 wpf条件 win7 sp1 dotnet-runtime-5 vc_redist KB2999226 KB4457144 Tips:官网条件最后一个最坑爹,KB2533623不 ...

  7. 01 | 堆、栈、RAII:C++里该如何管理资源?(极客时间笔记)

    基本概念 堆,英文是 heap,在内存管理的语境下,指的是动态分配内存的区域.这个堆跟数据结构里的堆不是一回事.这里的内存,被分配之后需要手工释放,否则,就会造成内存泄漏. C++ 标准里一个相关概念 ...

  8. Mysql 8 使用过程中的命令记录

    Mysql 8 使用过程中的命令记录 注: 当前 MySQL 数据库的版本 8.0.27 修改密码 1. 使用其他用户修改root 密码 ALTER USER 'root'@'localhost' I ...

  9. Java设计模式——抽象工厂模式

    抽象工厂模式也是创建模式,可以把它理解成创建工厂的工厂,这种模式也是我们经常使用的.在抽象工厂中的接口是用来创建工厂的,每个生成的工厂又都可以按照工厂模式创建其他对象. 举例说明: 创建Shape接口 ...

  10. Python Windows 快捷键自动给剪贴板(复制)图片添加水印

    编写一个能在windows上使用的按下快捷键自动给剪贴板(复制)的图片添加水印的小工具.plyer.PIL.pyinstaller.pynput.win32clipboard库.记录自己踩过的坑,部分 ...