1 命名空间

  对于Python 来说命名空间一共有三种

  1 内置命名空间 —— Python 解释器

    就是Python 解释器一启动就可以使用的名字,储存在内置命名空间中。内置的名字在启动解释器的时候被加载进内存里

  2 全局命名空间 —— 我们所命名的,但不是函数中的代码

    是在程序从上到下被执行的过程中依次加载进内存中的,放置了我们所设置的所有变量名和函数名

  3 局部命名空间 —— 函数

    就是函数内部定义的名字,当调用函数时,才会产生这个名称空间,随着函数执行的结束,这个命名空间又消失

  PS:

    1 在局部中可以使用全局、内置命名空间中的名字;在全局中可以使用内置命名空间的名字,但不能使用局部中定义的名字;在内置中不能使用局部和全局的名字

    2 正常情况下直接使用内置的名字,当在全局定义了和内置名字空间中同名的名字时,会使用全局的名字;自己有名字就用自己的,没有就一级级身上找,如果内置中还没有,就会报错;多个函数拥有多个独立的局部名字空间,不互相共享

2 函数名

def func():pass

  其中func 是函数的内存地址,函数名加(),是函数的调用,可以类比为:函数的内存地址() = 函数的调用

  函数名就是内存地址;函数名可以赋值;函数名可以作为容器类型(元组、列表和字典)的元素;函数名可以作为函数的返回值;函数名可以作为参数

3 函数的作用域

  函数的作用域可以分为两种

  全局作用域 —— 作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域 —— globals()

  局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域)—— locals()

  对于不可变的数据类型来说,局部可以查看全局作用域中的变量,但是不能直接修改,如果想修改,需要在程序的一开始添加 global 声名,如果在一个局部(函数)内声名一个global 变量,那么这个变量在局部的所有操作将对全局的变量有效

a = 1
def func():global aa += 1print(a)
func()

  对于 globals() 和 loclas() 方法

a = 1
b = 2
def func():x = 'aaa'y = 'bbb'print(locals())    #1 打印当前print(globals())    #2 打印全局
func()
print(globals())    #3 打印全局
print(locals())    #4 打印当前

  两者打印的是,以字典的形式打印出命名。2、3、4 打印的内容一致,1 打印的是函数内命名的情况

4 函数的嵌套

  定义:就是内部函数可以使用外部函数的变量

a = 1
def func1():a = 2def func2():nonlocal a #声明了一个上面第一层局部变量a += 1  # 对不可变数据类型进行了修改  print(a)func2()print(a)
func1()
print(a)

  nocolal 只能用于局部变量,找上层中离当前函数最近一层的局部变量;声明 noncolal 的内部函数的变量修改会影响到离当前函数最近一层的局部变量;对全局无效,对局部也只是最近的一层有影响。

5 闭包

  闭包就是内部函数调用外部函数的变量

def outer():a = 1def innner():print(a)return inner
inn = outer()
inn()

  目的是保护函数内定义的值,并且节省内存空间,不用每次都定义一个a,直接用即可~

  来个三元运算

# 取两个数的最大值
def func(a,b):return a if a > b else b
print(func(3, 5))

6 小作业

 # 1 写函数,接收 n 个数字,求这些参数数字的和def sun_func(*args):total = 0for i in args:total += ireturn total

# 2 读代码,回答:代码中打印出来的值 a、b 和 c 分别是什么?为什么?
a = 10
b = 20
def test5(a, b):print(a, b)
c = test5(b, a)
print(c)
# 得出的结果为:
# 20 10
# None 

# 3 写函数,检查获取传入列表或元组的对象的所有奇数位索引对应的元素,并将其作为新的列表返回给调用者
def func(lis):return lis[1::2]
print(func([1,2,3,4,5,6,]))

# 4 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5
def func(x):return len(x) > 5
print(func('dfs'))
print(func([1,2,3,4,5,6,]))
print(func((1,2,3,4,5,)))

# 5 写函数,检查用户传入列表的长度是否大于2,如果大于,那么仅保留前两个长度的内容,并将新内容返回给调用者
def func(lis):return lis[:2] # 如果列表长度不够的话,是不会报错的

# 6 写函数,计算传入字符串中,数字、字母、空格以及其它 的个数 ,并返回结果
def func(s):dic = {'n_digist':0,'n_alphabet':0,'n_blank':0,'n_other':0}for i  in s:if i.isdigit():dic['n_digist'] += 1elif i.isalpha():dic['n_alphabet'] += 1elif i.isspace():dic['n_blank'] += 1else:dic['n_other'] += 1return dic
print(func('skjdfhwhihsdfjkh389fhsfhksf  [fahh=-=-'))

转载于:https://www.cnblogs.com/YS-0717/p/9431269.html

Python学习之路基础篇--10Python基础,函数进阶相关推荐

  1. 王亟亟的Python学习之路(三)-基础语法以及基本数据类型

    转载请注明出处:王亟亟的大牛之路 理论知识虽然很枯燥,但是你以后的高度取决于你基础的厚度 每种语言多多少少都有它的保留关键字 JAVA的: Python的: 那关键字是什么? 电脑语言里事先定义的,有 ...

  2. Python学习之路 拓展篇 Pychram的应用

    1.create new project 创建新的文件夹 2.创建Pure Python,填写路径然后点击创建Create进行创建. 3.然后右键点开创建的文件夹."show in Expl ...

  3. python进阶_基础篇10(函数进阶,列表推导式)

    函数进阶 函数就是变量 定义函数的时候,其实就是在定义一个类型时function的变量,函数名就是变量名 普通变量能做的事情,函数都可以做 print('===================1.函数 ...

  4. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  5. 《四海小记c++学习之路》第一阶段 基础

    <四海小记c++学习之路>第一阶段 基础 第一阶段 基础 1 c++初识 1.1 第一个c++程序 1.1.1创建项目 1.1.3 c++书写Helloworld 1.2 注释 1.3 变 ...

  6. Python学习-01(其实是Linus基础)

    Python学习-01(其实是Linus基础) 1.操作系统(Operation System) ##1.1操作系统的作用 1. 直接操作计算机硬件(用来管理硬件设备) 2. 把操作硬件的代码封装成一 ...

  7. 我的Python学习之路(一)_Mr_Ouyang

    我的Python学习之路(一)_Mr_Ouyang 笔者按: 本文从18:55开始写作,至19:38中断,又从21:12始继续,至23:22写就. 共计耗时113分钟,总字数9081字,约80.4字/ ...

  8. Python学习---入门导学篇

    Python学习---入门导学篇 Python的特点 Python受人喜欢的原因 Python的缺点 Python能做什么? Python基础语法 Python的特点 1.Python是一门编程语言, ...

  9. Python学习之路9☞面向对象的程序设计

    Python学习之路9☞面向对象的程序设计 一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什 ...

最新文章

  1. Windows phone 7更新已经支持复制/粘贴[有图有真相]
  2. 浅谈大型网络入侵检测建设
  3. 软件测试_单元测试反模式,完整列表
  4. 如何面对边缘计算10个痛点?
  5. python中一个汉字点3个字节? utf-8
  6. strtus2改成springboot_springboot+struts2打成jar包运行
  7. javaEE jdbc编程步骤
  8. Mac上神奇的内置搜索引擎——Spotlight(聚焦搜索)
  9. python多线程_Python多线程和队列结合demo
  10. python朴素贝叶斯分类器_简单说一下朴素贝叶斯分类器
  11. js几种加密/解密方法
  12. vscode英文界面转换为中文界面
  13. Google adsense帐户被封到解封全过程
  14. Unity PC打包后日志查看
  15. 最新江苏安全员B考试单选练习题库
  16. 常用的十种数据分析方法
  17. 国标SVAC对飙通行标准,优势何在?
  18. 数据治理之主数据管理MDM
  19. 《信息处理技术》知识点整理
  20. C++之sstream

热门文章

  1. shell中和||的使用方法
  2. window.name实现的跨域数据传输
  3. MFC里ON_COMMAND_RANGE消息映射的ID问题
  4. 15个新鲜的单页网站设计实例
  5. 大话IT职场之工作和生活的平衡
  6. 计算机审计 pdf,计算机审计第三章作业.pdf
  7. 区块链基础:理论和术语
  8. graphql redux_如何在Redux应用程序中使用GraphQL
  9. c语言如何不产生僵尸进程,第三章 九析带你处理 zombie(defunct) 进程
  10. 5 zabbix 添加host_运维监控实战篇,zabbix自动发现和自动注册图文详解