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

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

5 闭包

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

def outer():
a = 1
def 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 = 0
for i in args:
total += i
return 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'] += 1
elif i.isalpha():
dic['n_alphabet'] += 1
elif i.isspace():
dic['n_blank'] += 1
else:dic['n_other'] += 1
return dic
print(func('skjdfhwhihsdfjkh389fhsfhksf [fahh=-=-'))

Python学习之路基础篇--10Python基础,函数进阶的更多相关文章

  1. python学习之路入门篇

    本文是up学习python过程中遇到的一些问题及总结归纳,本小节是入门篇. python基本语法 循环.分支不多赘述. 模块:一个.py文件就是一个模块. 文件和异常 模式 含义解释 “r” 读模式 ...

  2. Python学习【第十篇】基础之杂货铺

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 百分号方式: ...

  3. Python学习第十八篇——低耦合函数设计思想

    import json 2 def greet_user(filename): 3 try: 4 with open(filename) as f_obj: 5 username = json.loa ...

  4. Python学习之路【目录】

    本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...

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

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

  6. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  7. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  8. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  9. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

随机推荐

  1. JeasyUI,导出Excel

    这个是客户端表格导出伪Excel文档. 不知道为啥,超过200条,不能导出,显示网络错误 $.extend($.fn.datagrid.methods, { //超过200条,不能导出,显示网络错误? ...

  2. PHP基础入门(五)---PHP面向对象实用基础知识

    前言: 今天来和大家介绍一下PHP的面向对象.说到面向对象,我不得不提一下面向过程,因为本人在初学时,常常分不清楚面向对象和面向过程,下面就来给大家介绍一下它们的区别: 面向对象专注于由哪个对象来处理 ...

  3. sap快捷登录

    利用程序SAPSHCUT.EXE    示例:sapshcut  -type=Transaction -system=IDS -client=800 -user=barry -pw=123456 -l ...

  4. sql:按年、月、日钻取时间

    #按月排SELECT count(EN_NAME), DATE_FORMAT( CREATE_DATE, "%Y-%m" )FROM financeWHERE DATE_FORMA ...

  5. 蒙层嵌套pdf以及连接后台

    一.在本地浏览pdf(直接将element-dialog 和 iframe相结合)需要将要浏览的pdf放入static文件夹下面 <el-button type="text" ...

  6. 终端的rz命令,覆盖原文件。

    不覆盖:rz 覆盖 同名文件:rz -y

  7. jmeter如何链接数据库并拿到相应值用到请求中

    很久以前学习了jmeter如何使用数据库连接并请求相应值.jmeter如何上传文件 结果现在忘记了很多...,现在重头学习一遍,所以说 还是边学边记录,那天忘记了 ,自己看看笔记 分步骤来写 1.数据 ...

  8. DevExpress ASP.NET Core Controls 2019发展蓝图(No.4)

    本文主要为大家介绍DevExpress ASP.NET Core Controls 2019年的官方发展蓝图,更多精彩内容欢迎持续收藏关注哦~ [DevExpress ASP.NET Controls ...

  9. (2018 Multi-University Training Contest 3)Problem L. Visual Cube

      //题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6330//题目大意:按照一定格式画出一个 a×b×c 的长方体.  #include <b ...

  10. Tomcat基本配置

    第二十六课 Tomcat基本配置 目录 一. Tomcat介绍 二. 安装jdk 三. 安装Tomcat 四. 配置Tomcat监听80端口 五. 配置Tomcat虚拟主机 六. Tomcat日志 七 ...