python的函数式编程_Python函数式编程-概念理解,python
函数式编程-高级
一、函数的参数类型
1. 不可变类型参数
不可变类型参数有:整数,字典,字符串
传递不可变类型参数,不会影响参数本身。
代码:
a = 100
print(f"函数外边a的id值----->{id(a)}")
print(f"a的值为{a}")
def func(b):
# a和b的id值相同
print(f"函数参数传递过来的id值----->{id(b)}")
print(f"b的值为:{b}")
# 修改b的值
b = 200
print(f"修改后b的id----->{id(b)}")
print(f"修改后b的值为:{b}")
func(a)
print(f"b值修改后,a的id值----->{id(a)}")
print(f"b值修改后,a的值:{a}")
结果:
函数外边a的id值----->140729229159920
a的值为100
函数参数传递过来的id值----->140729229159920
b的值为:100
修改后b的id----->140729229163120
修改后b的值为:200
b值修改后,a的id值----->140729229159920
b值修改后,a的值:100
2. 可变类型参数
可变类型参数有:列表、字典
传递可变类型参数,如果直接重新赋值,那么也不会影响参数本身,如果直接在原对象基础上进行
修改会影响。
代码:
list_outer = [1, 2, 3]
print("list_outer的值和id值:", list_outer, id(list_outer))
def func(list_inner):
print("list_inner的值和id:", list_inner, id(list_inner))
list_inner.append(4)
print("修改后list_inner的值和id:", list_inner, id(list_inner))
func(list_outer)
print("修改后list_outer的值和id值:", list_outer, id(list_outer))
结果:
list_outer的值和id值: [1, 2, 3] 1615815397768
list_inner的值和id: [1, 2, 3] 1615815397768
修改后list_inner的值和id: [1, 2, 3, 4] 1615815397768
修改后list_outer的值和id值: [1, 2, 3, 4] 1615815397768
二、命名空间
1. 概念
命名空间指的是保存程序中变量名和值的字典。字典的key是变量的名称,value是变量的值。
如:{“name”: “zr”, “age”:18}
2. 分类
局部命名空间:记录函数的变量。包括函数的参数和函数内定义的变量。
全局命名空间:记录模块(一个.py文件)的变量。包括函数、类、其他导入的模块。
内置命名空间:记录解释器内置的变量。任何模块都可访问它,包括内置的函数和异常。
3. 访问命名空间
locals():访问局部命名空间:根据调用的位置有关系
globals():访问全局命名空间:与调用位置无关
def func1(name, age):
"""命名空间的访问"""
num = 10
loc = locals() # 局部命名空间
print(loc) # {'name': 'tom', 'age': 18, 'num': 10}
func1("tom", 18)
glo = globals()# 全局命名空间
print(glo)
"""
{'__name__': '__main__', '__doc__': None, '__package__': None,
'__loader__': <_frozen_importlib_external.sourcefileloader object at>,
'__spec__': None, '__annotations__': {}, '__builtins__': ,
'__cached__': None, 'func1': , 'glo': {...}}
"""
4. 命名空间的加载顺序
First:内置命名空间(程序运行前加载)
Second:全局命名空间(程序运行时加载)
Third:局部命名空间(程序运行中,函数被调用时才加载,当函数返回结果或抛出异常时,被删除。每个递归调用的函数都有自己的命名空间。)
5. 命名空间的查找顺序
局部命名空间 -------> 全局命名空间 --------> 内置命名空间
三、作用域,局部变量,全局变量
1. 概念
作用域:变量在程序中的可应用范围。
局部变量:在函数中定义的变量,只在函数内部生效。
全局变量:在程序一开始定义的变量,在整个程序中起作用。
2. 作用域的分类
Local(函数内部):局部作用域
Enclosing(嵌套函数的外层函数内部):嵌套作用域(闭包)
Global(模块全局):全局作用域
Built-in(内建):内建作用域
注意:
在Python中,模块(module),类(class)、函数(def、lambda)会产生新的作用域。而其他代码块不会,也就是说,类似分支语句、循环语句、异常捕捉等的变量是可以全局使用的。
3.全局变量和局部变量
全局变量是不可变数据类型,函数无法修改全局变量的值。
全局变量是可变数据类型,函数可以修改全局变量的值。
name = "zs" # 全局变量
def func(arg1):
name = "ls" # 局部变量
age = arg1
print(name) # zs
func(23)
# print(age) # 报错 NameError: name 'age' is not defined
四、global 和 nonlocal关键字
1. global
global关键字可以将局部变量变成一个全局变量。
格式: global 变量名
n = 20
def func():
global n # 将n声明为全局变量
n = n+1
print(n) # 21
func()
print(n) # 21
2. nonlocal
nonlocal关键字可以修改外层(非全局)变量。
注意:必须得是嵌套函数,nonlocal才会生效。
格式: nonlocal 变量名
def func():
age = 20
def inner():
# global age # 函数外无age变量,声明为全局变量会错误
nonlocal age # 将内层变量age声明为外层age
age = age + 1
print(age) # 21
inner()
print(age) # 21
func()
python的函数式编程_Python函数式编程-概念理解,python相关推荐
- 从零学python黑马程序员_Python实战编程--从零学Python/Python应用编程丛书
导语 内容提要 黑马程序员编著的<Python实战编程--从零学Python>涵盖了Python开发的核心知识.其中,第1-13章主要讲解的是Python的核心语法,包括基本概念和语句.风 ...
- python完全支持面向对象编程_Python 面向对象编程概要
面向对象三大特性 面向对象的三大特性是指:封装.继承和多态. 封装 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容. 所以,在使用面向对象的封装特性时,需要: 将内容封装到某处 ...
- python游戏使用教程_PYTHON游戏编程入门_IT教程网
资源名称:PYTHON游戏编程入门 内容简介: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Py ...
- python socket编程_Python Socket编程实现网络编程
对于有经验的开发人员来说,掌握的编程语言应该是不少的.在这些编程语言中,网络编程的应用时必不可少的.其中Python也是这样的编程语言.我们今天将会在这里为大家详细介绍一下Python Socket编 ...
- python课设代码_python课程编程题汇总(上)
python编程题汇总 众所周知,由于疫情的原因,大家都在上网课,我也不例外啦~ 用这个贴子来记录也和大家分享一下我们课上的编程讨论题 中篇在此→python课程编程题汇总(中) 下篇在此→pytho ...
- python多进程编程_python并发编程中的多进程(代码实现)
一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...
- python 窗体编程_python窗体编程
广告关闭 云服务器1核2G首年99年,还有多款热门云产品满足您的上云需求 python里的图形化界面(gui)模块主要有tkinter(python自带).pyqt.wxpython,我们这节主要讲解 ...
- python 网络编程_Python网络编程(原书第2版)
Python网络编程(原书第2版) 作者:(美)埃里克·周(Eric Chou) 著 出版日期:2019年06月 文件大小:54.50M 支持设备: ¥68.00 适用客户端: 言商书局 iPad/i ...
- python类详解_python面向对象编程:python类和实例讲解
东尧爱分享 这是东尧每天一篇文章的第51天 东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福. 1 什么是对象 在python里面,一切皆为对象.也就是说python里的所有数据都 ...
- python采用面向对象编程模式吗_如何理解 Python 中的面向对象编程?
现如今面向对象编程的使用非常广泛,本文我们就来探讨一下Python中的面向对象编程. 作者 | Radek Fabisiak 译者 | 弯月,责编 | 郭芮 以下为译文: Python支持多种类型的编 ...
最新文章
- 神经网络基础知识总结
- 01.The Introduction of Linux
- mysql触发器 存储过程_mysql触发器和存储过程
- mask rcnn算法分析_在modelarts上部署mask-rcnn模型
- Linux 网卡相关操作
- Android开发中StackOverflowError错误实例分析
- 前端:根据类型获取正则表达式字符串​
- WPF 实现大转盘抽奖~
- C语言SetConsoleCursorPosition()函数来定位光标位置
- GitHub使用教程
- 数据挖掘期末论文要求
- mysql 客户端命令行_强大的工具 MySQL客户端命令行应用技巧
- 东汉十三州以及各个郡的说明
- 如何用两个栈实现一个队列
- 发送短信工具类(亿美短信平台接口)
- KOD: Linux 命令行安装
- Spring Cloud Ribbon 详解
- linux和windows认证sssd,linux – 使用sssd和Active Directory集成的麻烦
- html table内边框线条,HTML_TABLE内外边框
- Centos6.5离线安装中文输入法
热门文章
- 特别实用的 6 款 Python 特殊文本格式处理库推荐
- python 小波去噪,用Pywavelet去噪信号?
- 2020年电大c语言程序设计作业1答案,2019年最新电大C语言程序设计作业答案.doc
- samba 问题Windows能看到文件夹但是不能打开(路径写错了)
- 计算机组成原理(哈工大刘宏伟)135讲(一)
- 王道计算机考研 数据结构 (图-上)
- linux环境下安装mysql 8.0
- mysql匹配数据结构_MySQL索引背后的数据结构及原理
- oracle+restore+pfile,RAC(11gR2) OCR BACKUP RESTORE
- 页码太靠上怎么办_有些宝宝到了二岁不会说话怎么办