Python全栈-day10-函数2
函数高级篇
1.函数嵌套
1)嵌套定义
在函数内定义另外一个函数
def func():
print('嵌套定义')
def func1():
print('这是一个嵌套函数')
def func2():
print('第二层级嵌套函数')
func2()
# 只能在函数内调用嵌套的函数
# 嵌套函数只能在当前函数处在的层级进行调用
func1()
func()
2)嵌套调用
函数内调其它函数
def max(x,y):
if x > y:
return x
else:
return y
def func(x):
print(x)
func(max(10,20))
2.名称空间
1)定义:
存储变量名和变量值的绑定关系
2)分为三类:
a.内置名称空间
内置名:Python解释器自带的,如print等内置方法名
作用时间:在打开解释器时生效,关闭时失效
作用域:整个Python解释器,具有全局特性
b.全局名称空间
全局名:文件级别的名字
作用时间:Python脚本执行时候生效,文件结束或者文件执行期间被删除的时候失效
作用域:整个脚本范围内
c.局部名称空间
局部名:函数内部的名字
作用时间:函数调用时生效,结束调用时失效
作用域:函数内部
要点:
名称查询顺序:
局部名称空间 > 全局名称空间 > 内置名称空间
3.作用域
1)全局作用域
范围:内置名称空间、全局名称空间
特点:
a.在任何位置都可以访问
b.该范围内的名字会伴随着整个生命周期
2)局部作用域
范围:包含的事局部名称空间的名字
特点:
a.只在函数内使用
b.调用函数时生效,调用结束时失效
4.函数对象
函数在Python是第一对象,可以被引用
1)函数可以被引用
def func():
pass
f = func # 函数的内存地址赋值给其他变量
2)函数可以当做参数传入
def bar(x):
print(x)
bar(func)
3)函数可以被当做返回值返回(函数的返回值可以是任意类型)
def bar(x):
return x # 返回func函数的内存地址
bar(func)
4)可以当做任何容器类型的元素
def auth():
print('认证...')
def register():
print('注册...')
def search():
print('查看...')
def transfer():
print('转账...') # 后续需要添加先功能可直接将定义好的功能函数名!!!加到字典中
# 无序大量更改交互函数的代码
func_dict = {
'':auth,
'':register,
'':search,
'':transfer
}
def interaction():
while True:
print('''
用户交互:
1 认证
2 注册
3 查看
4 转账
输入quit退出
''')
choice = input('选择操作>>').strip()
if choice in func_dict:
func_dict[choice]()
elif choice == 'quit':
break
else:
print('非法操作...') # 函数调用
interaction() # 将函数的内存地址赋值给列表
l = [auth,register,search,interaction]
5.函数闭包
1)定义
a.定义在函数的函数
b.并且该函数包含对外部函数作用域中名字的引用
2)闭
指定义在函数内部的函数
作用域关系在函数定义时已经定义好,与函数在哪里被调用无关!!!
def outer():
def inner():
x = 10
print('from inner...',x)
# 将函数的内存地址返回给outer
return inner # 函数的返回值赋值给全局变量outer
# 相当于把inner的内存地址复制给一个全局变量
return_inner = outer() # 间接调用了inner()
x = 100
return_inner() # 与调用位置无关,输出 x 依旧为原函数内x的值 def bar():
x = 99
return_inner()
bar()
闭包高级使用:装饰器
http://www.cnblogs.com/mdzzbojo/p/8669485.html
Python全栈-day10-函数2的更多相关文章
- Python全栈day10(基础知识练习题)
一,执行python的两种方式 1,写在脚本里面调用python执行,例如python test.py 2, 输入python在命令行交互执行,例如 python >>> pri ...
- Python全栈day10(基本数据类型及其常用方法)
一,数字 1,int 将字符串转化成数字 a = '123' b=int(a) b=123 2,以进制方式进行转换 num="a" >>> num = " ...
- Python全栈day10(Pycharm的安装和使用)
Python开发IDE 一,下载Pycharm专业版 二,安装Pycharm 三,新建项目 四,设置字体大小
- Python全栈day10(运算符)
一,运算符 + - * . ** % // 二,in 和not in 一个字符串包含多个字符可以通过in判断字符是否属于改字符串 >>> name = "zhangsan& ...
- python全栈开发 生成器 :生成器函数,推导式及生成器表达式
python 全栈开发 1.生成器函数 2.推导式 3.生成器表达式 一.生成器函数 1.生成器: 生成器的本质就是迭代器 (1)生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(), ...
- python全栈开发之匿名函数和递归函数
python 匿名函数和递归函数 python全栈开发,匿名函数,递归函数 匿名函数 lambda函数也叫匿名函数,即函数没有具体的名称.是为了解决一些功能很简单需求而设计的一句话函数.如下: #这段 ...
- 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】
点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...
- Python全栈【Socket网络编程】
Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
随机推荐
- [developmemt][dpdk] dpdk优化(转)
转发:https://software.intel.com/en-us/articles/dpdk-performance-optimization-guidelines-white-paper 转发 ...
- notify,wait,synchronized实现线程间通知
wait阻塞线程释放锁:notify使wait所在的线程被唤醒在次获得锁,并执行,但要等到notify所在的线程代码全部执行后! 示例代码如下: package com.vhbi.service.im ...
- zabbix server源码安装
一.准备工作 yum -y install net-snmp-devel php-bcmath php-ctype php-xml php-xmlreader php-xmlwriter php-se ...
- 【JMeter】前置处理器
BeanShell PreProcessor 使用BeanShell在请求进行之前进行操作.语法使用与BeanShell Sampler是一样的.但可使用的内置变量稍有不同 JDBC Pre ...
- (5.1)sql server系统数据库
关键词:mssql系统数据库,sql server系统数据库,tempdb的作用 master:它包含一个系统表集合,是整个实例的中央存储库,维护登录账户,其他数据库,文件分布,系统配置设置,磁盘空间 ...
- shell 命令 set命令
set命令输出所有的变量,包括全局变量和局部变量: set-o命令显示bash Shell的所有参数配置信息 set -o nounset -u ...
- 如何在js中将统计代码图标隐藏
建站时我们都会加一下网站统计,方便把控内容的内容的运营.大部分站长安装的站点统计是第三方统计代码,js形式的,很少用以服务器日志为基础分析的统计.(当然能通过网站日志来分析网站的运营者比一般的站长水平 ...
- RN TextInput用法
效果图: 代码: import React, {Component} from 'react' import {StyleSheet, View, Text, TouchableOpacity, Te ...
- 003-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-分布式服务框架的选择
3.1.淘宝平台“服务化”历程 大约2007年,淘宝500人团队,维护一个war包,200多个功能模块. 1)项目团队协同成本高,业务响应越来越慢 2)应用复杂度超出人的认知负载. 3)错误难于隔离[ ...
- UltraISO 9.7.0.3476中文完美破解安装版
https://cn.ultraiso.net/uiso9_cn.exe 简体中文版专用: 注册名:Guanjiu 注册码:A06C-83A7-701D-6CFC 多国语言版专用: 注册 ...