函数.python
今日内容概要
名称空间
名字的查找顺序
作用域
global与nonlocal关键字
函数名对象
函数的嵌套
今日内容详细
1.名称空间
#名称空间
其实就是存放变量名与变量名绑定关系的地方
#分类
1.内置名称空间
python解释器提前定义好的
print() open()
存活周期:python解释器运行至关闭
2.全局名称空间
在py文件中编写的代码运行之后产生的名字都会存到里面
name = 'jason' # 变量名name存入全局名称空间
def index(): # 函数名index存入全局名称空间
pass
if True:
a = 111 # 变量名a存入全局名称空间
for i in range(10): # 变量名i存入全局名称空间
pass
while True:
b = 222 # 变量名b存入全局名称空间
存活周期:py文件运行至关闭 3.局部名称空间
函数体代码运行产生的都存入局部名称空间
def index():
name = 'zhou' #name存入
存活周期:函数体代码运行至结束
2.名字的查找顺序
# 在查找名字的时候 一定要先搞清楚自己在哪个空间
1.如果在局部名称空间
局部名称空间>>>全局名称空间>>>内置名称空间
2.如果在全局名称空间
全局名称空间>>>内置名称空间
len = '我是全局名称空间的len'
def index():
len = '我是局部名称空间的len'
print(len)
index() # 调用函数 函数体就会执行 就会产生局部名称空间
print(len)
a = 111
"""如果函数没有被调用 那么不要去管函数体代码有多复杂 先跳过"""
def f1():
a = 222
def f2():
a = 333
def f3():
print(a)# 检测语法的时候 发现f3的局部名称空间将来会有x 所以查找的时候就跟f3的局部名称空间要(特例 可以忽略)
a = 444
# print(a)
f3()
f2()
f1()
'''
局部名称空间之间如果不是嵌套关系 那么互不干涉
def index1():
name = 'jason'
def index2():
age = 18
print(name) # 报错
index1()
index2()

3.作用域
#名称空间能够作用的范围
内置名称空间
程序任意阶段任意位置均可使用(全局有效)
全局名称空间
同上
局部名称空间
一般情况下只在各自局部名称空间中有效(局部有效)
4.global与nonlocal关键字'''也可通过一些手段打破规则''
'''gloabl关键字:局部修改全局不可变类型'''
a = 111
def index():
# a = 222 #并不是在修改全局的a 而是在局部名称空间中创建了一个新的a
global a # 申明 修改的是全局a而不是产生新的a
a = 333
index()
print(a)
l1 = [111, 222, 333]
def index():
l1.append(444)
index()
print(l1)
"""
如果想要在局部修改全局的不可变类型
需要提前加关键字global申明
如果想要在局部修改全局的可变类型
不需要加关键字global申明
"""
def index():
x = 111 # 在index的局部产生一个x=111
l1 = [11, 22, 33]
def f1():
# x = 222 # 在f1的局部产生一个x=222
# print(x)
# 局部名称空间嵌套 内层修改外层
# nonlocal x
# x = 333
l1.append(44)
f1()
print(x)
print(l1)
index()
"""
局部名称空间嵌套的情况下 内层如果想要修改外层
情况1数据是不可变类型
需要使用关键字nonlocal
情况2数据是可变类型
不需要使用关键字nonlocal
"""
5.函数名对象
# Author:Jason
# def index():
# print('from function index')
# 用法1:函数名可以当做变量名赋值
# print(index)
# res = index # 让res也指向函数体代码
# print(res)
# res() # index()
# 用法2:函数名还可以当成函数的实参
# def index():
# print('from index')
# def func(a):
# print('from func')
# print(a)
# a()
# func(index)
# 用法3:函数名还可以当做函数的返回值
# def func():
# print('from func')
# return index # 将函数名当做返回值
# def index():
# print('from index')
# res = func() # res接收函数名
# print(res) # 指向的是index函数的内存地址
# res() # index()
# 用法4:函数名可以作为容器类型的元素
'''容器类型:内部可以存档多个元素的数据类型>>>:列表、元组、字典'''
# def index():
# print('from index')
# l1 = [11, 22, 33, 44, index]
# print(l1)
# l1[-1]() # index()
def register():
print('注册功能')
def login():
print('登录功能')
def transfer():
print('转账功能')
def withdraw():
print('提现功能')
def check_order():
print('查看账单')
def shopping():
print('购物功能')
def check_account():
print('查看余额')
# 定义一个功能存放区
func_dict = {
'1':register,
'2':login,
'3':transfer,
'4':withdraw,
'5':check_order,
'6':shopping,
'7':check_account
}
while True:
print("""
1.注册功能
2.登录功能
3.转账功能
4.提现功能
5.查看账单
6.购物功能
7.查看余额
""")
choice = input('请输入您想要执行的功能编号>>>:').strip()
if choice in func_dict:
# 获取键对应的值(函数名)
func_name = func_dict.get(choice)
# 执行函数
func_name()
else:
print('功能编号不存在')
# 当功能比较多的是 频繁的编写elif很麻烦
# if choice == '1':
# register()
# elif choice == '2':
# login()
# elif choice == '3':
# transfer()
# elif choice == '4':
# withdraw()
# elif choice == '5':
# check_order()
# elif choice == '6':
# shopping()
# else:
# print('请输入正确的功能编号')
6.函数的嵌套
# 函数的嵌套调用
# def index():
# func()
# print('from index')
# def func():
# index()
# print('from func')
# func()
"""在学习函数的时候 前期一定要细心 死咬概念 定义调用"""
def my_max(a,b):
'''返回两个数中的较大值'''
if a > b:
return a
return b
# print(my_max(100,999))
def many_max(a,b,c,d):
'''返回四个数中的最大值'''
res = my_max(a,b) # 两两先比
res1 = my_max(res,c) # ...
res2 = my_max(res1,d) # ...
...
# 函数的定义
def all_func(cmd):
def register():
print('注册功能')
def login():
print('登录功能')
def transfer():
print('转账功能')
if cmd == '1':
register()
elif cmd == '2':
login()
elif cmd == '3':
transfer()
else:
print('哈哈哈 偷懒了 没有用刚刚的功能字典')
all_func('1')
all_func('2')
"""
函数的学习会让我们的代码逻辑更加清晰 更加便于维护
"""

函数.python的更多相关文章
- 函数:Python的乐高积木 - 零基础入门学习Python017
函数:Python的乐高积木 让编程改变世界 Change the world by program 相信大家小时候应该都玩过神奇的乐高积木,只要通过想象和创意,我们可以用它拼凑出很多神奇的东西. 随 ...
- 匿名函数python内置高阶函数以及递归
匿名函数 python定义一个函数通常使用def关键词,后面跟函数名,然后是注释.代码块等. def func(): '''注释''' print('from func') 这样就在全局命名空间定义了 ...
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- zip函数-Python 3
zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表. zip函数在获取数据后,生成字典(dict)时比较好用. for examples: # Code based on P ...
- partial函数-python学习
一个函数可以有多个参数,而在有的情况下有的参数先得到,有的参数需要在后面的情景中才能知道,python 给我们提供了partial函数用于携带部分参数生成一个新函数. def add(a,b,c=2) ...
- Python hasattr() 函数 // python中hasattr()、getattr()、setattr()函数的使用
http://www.runoob.com/python/python-func-hasattr.html https://www.cnblogs.com/zanjiahaoge666/p/74752 ...
- 迭代器与函数Python学习(四)
1.1 迭代器: 迭代的工具 1.1.1 什么是迭代: 指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果是下一次重复的初始值 while True: print('=====> ...
- 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程
目录 函数进阶三 1. 匿名函数 1. 什么是匿名函数 2. 匿名函数的语法 3. 能和匿名函数联用的一些方法 2. python解释器内置方法 3. 异常处理 面向过程编程 函数进阶三 1. 匿名函 ...
- python基础-3 集合 三元运算 深浅拷贝 函数 Python作用域
上节课总结 1 运算符 in 字符串 判断 : “hello” in "asdasfhelloasdfsadf" 列表元素判断:"li" in ['li', ...
- 第017讲:函数 - Python的乐高积木
0. 你有听说过DRY吗? me:不知道 参考答案: 1. 都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢? me:函数可以设置参数. 参考答案:0) 可以降低代码量(调用函数只需要 ...
随机推荐
- Python入门随记(4)
在涉及一些实际问题,会碰到概率论等相关领域的知识,自然少不了矩阵运算,以下是Python中关于矩阵的简单操作: 1.常用库numpy import numpy as np 2.随机生成矩阵 a=np. ...
- 如何防止 IP 被盗用 保护网络正常运行
IP被盗用是指盗用者使用未经授权的IP来配置网上的计算机.目前IP盗用行为非常常见,许多"不法之徒"用盗用地址的行为来逃避追踪.隐藏自己的身份.IP的盗用行为侵害了网络正常用户的权 ...
- 常见的url编码
URL编码值 字符 %20 空格 %22 " %23 # %25 % %26 &; %28 ( %29 ) %2B + %2C , %2F / %3A : %3B ; %3C < ...
- BGP的五种报文六种状态
BGP的五种报文 Open报文:用于协商BGP参数,包括版本号,AS号等信息.在两个路由器之间建立了TCP会话之后开始交换Open信息以确认是否能形成邻居关系,是TCP建立后发送的第一个信息,类似OS ...
- HyBird App(混合应用)核心原理JSBridge
目录 app分类 HyBird App(混合应用) JSBridge介绍 优势及应用场景 JsBridge的核心 1.Web端调用Native端代码 1.1 拦截URL Schema 1.2 注入ap ...
- HashMap?ConcurrentHashMap?
Java团长在csdn 2019-02-06 19:58:00 104241 收藏 666 来源:crossoverJie(ID:crossoverJie) 前言 Map 这样的 Key ...
- BeanFactory – BeanFactory 实现举例?
Bean 工厂是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从正真的应用代码中分离. 最常用的BeanFactory 实现是XmlBeanFactory 类.
- 使用kindeditor
首先在http://kindeditor.net/demo.php下载样式 点击右上角的下载按钮 点击官方下载下载之后解压出来 然后在桌面创建一个文件夹 然后回到刚才的http://kindedito ...
- Java 面试问题列表包含的主题?
多线程,并发及线程基础 数据类型转换的基本原则 垃圾回收(GC) Java 集合框架 数组 字符串 GOF 设计模式 SOLID 抽象类与接口 Java 基础,如 equals 和 hashcode ...
- 学习MFS(五)
########################################################## mfs master 安装 建议 cp eth0 eth0:0 ifup eth ...


