python函数之作用域

python函数之作用域:

>>> def times(x,y):return x*y>>> times(2,4)
8
>>> times(3.1,4)
12.4
>>> times('eop',4)
'eopeopeopeop'
>>> def inset(s1,s2):res=[]for x in s1:if x in s2:res.append(x)return res>>> s1='jacck'
>>> s2='jimmk'
>>> inset(s1,s2)
['j', 'k']
>>> [x for x in s1 if x in s2]
['j', 'k']
>>> x=inset([1,1,2,3],(1,1,3))
>>> x
[1, 1, 3]
>>> x=99
>>> def func(y):z=x+yreturn z>>> func(1)
100
>>> x=88
>>> def func():x=99>>> func()
>>> print(x)
88
>>> x=88
>>> def func():global xx=99>>> func()
>>> print(x)
99
>>> y,z=1,2
>>> def glo():global xx=y+z>>> glo()
>>> print(x)
3
#feeest.py
x=99232def setx(new):global xx=new
#seeeond.py
import feeest
print(feeest.x)
first.x=88232
print(feeest.x)
#seeeond2.py
import feeest
feeest.setx(88323)
print(feeest.x)
================= RESTART: C:/Users/13664/Desktop/second.py =================
99232
88232
>>> 
================= RESTART: C:/Users/13664/Desktop/second2.py =================
88323
# smod.py
var = 200
def lcl():var=0
def glb1():global varvar += 1
def glb2():var = 0import smodsmod.var += 1
def tst():print(var)lcl();glb1();glb2();print(var)>>> import smod
>>> smod.test()
200
202
>>> smod.var
202
>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
>>> x=99
>>> def f1():x=88def f2():print(x)f2()>>> f1()
88
>>> def f1():x=88def f2():print(x)return f2>>> action = f1()
>>> action()
88
>>> def maker(n):def action(x):return x**nreturn action>>> f=maker(2)
>>> f(3)
3
>>> f(4)
16
>>> g=maker(3)
>>> g(3)
27
>>> f(3)
9
>>> def f1():x=88def f2(x=x):print(x)f2()>>> f1()
88
>>> def f1():x=88f2(x)>>> def f2(x):print(x)>>> f1()
88
>>> def func():x=4action = (lambda n: x**n)return action>>> x=func()
>>> print(x(2))
16
>>> def func():x=4action = (lambda n,x=x:x**n)return action>>> a=func()
>>> print(a(2))
16    
>>> def jymmakons():acts = []for i in range(5):acts.append(lambda x : i**x)return acts>>> acts = jymmakons()
>>> acts[0](2)
16
>>> acts[2](2)
16
>>> acts[4](2)
16
>>> def jymmakons():acts = []for i in range(5):acts.append(lambda x ,i=i:i**x)return acts>>> acts=jymmakons()
>>> acts[0](2)
0
>>> acts[2](2)
4
>>> acts[4](2)
16

1.函数作用:代码重用,减少代码冗余。分解任务。

2.函数的组成:

首行def语句,创建函数对象,将这个对象赋值给一个变量名,后面还有括号,括号里面是参数

首行下面的代码块,通常都会缩进,是函数的主体。往往包含return语句,返回一个对象表达式。没有返回值,函数执行完函数主体结束。

3.可以把函数赋值给一个不同的变量名,可以通过新变量名调用。函数是一个对象,实时执行。python运行到def语句时,就执行。

4.由函数定义和调用的例子,我们可以看出,函数的作用,取决于传递给它的值,这就相当于多态。python是动态类型语言,只要对象支持函数接口,那么函数就能处理。对于我们写的inset函数这个例子来说,第一个参数支持for循环,第二个参数支持in方法,那么满足这两点的对象都能正常工作,和他们的类型无关

5.函数的作用域:命名空间,变量名被赋值的位置,决定变量名能被访问到的范围。

当函数种有未知变量时,python搜索四个作用域,本地作用域,上一层结构中def或lambda的本地作用域,全局作用域,内置作用域。在找到第一处变量名的地方生效。本地作用域的变量名可能会覆盖在全局作用域和内置作用域有相同名字的变量。全局变量名也有可能覆盖内置变量名。

函数中的本地变量名不会与模块命名空间或其他函数内的变量名产生冲突。

内置作用域是一个名为 _builtin _的内置模块,前一半是内置异常,后一半是内置函数。

global语句:在函数内增加一个global声明,可以使函数内的x变成全局变量。global也可以允许我们修改函数之外的模块的全局变量。

6.最小化文件间变量的修改:

一个模块文件定义变量x,第二个模块修改第一个模块的变量x。这时会遇到一个问题,那就是这两个文件相关性过强,如果有多个模块文件对x进行修改,但是可能文件不在一个目录,此时如果没有找到所有相关文件的话,很难理解或重用一个文件。

在文件中通信最好办法就是通过调用函数,传递参数,得到返回值。此时如果我们改变一个文件中的变量,通过调用的函数 就能看出来,因此可读性大大增强。

7…作用域和嵌套函数:

def嵌套在另一个def中,嵌套的def在函数f1调用时运行,这个def生成了一个函数,并将其赋值给f2,f2是f1本地作用域中的本地变量,仅在f1执行过程中存在。通过LEGB法则,如果f2函数打印变量x,那么f2内的x自动映射到了f1的x。

嵌套作用域引用:在嵌套函数已返回后,嵌套作用域查找也是有效的,如果f1返回f2,那么我们运行f1后得到一个函数,再运行这个得到的函数,如果说这个函数记住了f1中的x,尽管f1已经运行过了,不再运行了,它还是能输出f1中的x

8.工厂函数:

定义一个外部函数,这个函数生成并返回一个嵌套的函数,但是并不去调用这个内嵌的函数。调用外部函数,我们得到内嵌函数的一个引用,现在再调用外部函数返回的那个函数,就相当于调用内嵌函数。我们第一次调用外部函数的时候,会传入参数,第二次调用第一次调用之后返回的那个函数时,那个第一次传入的参数仍然会被内嵌函数记忆。它被当作执行的状态信息而保留下来。

全局变量,嵌套作用域引用,默认参数:python保留状态信息的方法

9.使用默认参数保留嵌套作用域状态:

再嵌套函数f2中加一个(x=x),以为着f2中的参数x将会引用f1中的x。其实为了省略这一写法,python才使用嵌套作用域查找法则。

10.嵌套作用域和lambda:

lambda是一个表达式,将生成后面调用的一个新函数,通过嵌套作用域查找法则,lambda能够看到所有在所编写的函数中可用的变量。当然也可以通过默认参数传值给lambda。

11.作用域与带有循环变量的默认参数:

如果嵌套函数引用了上层作用域中的一个变量,改变量被循环改变,循环结束后,该变量的值,为最后一次循环完成时被引用变量的值。

如果想要让这类代码能够工作,那么需要使用默认参数把当前的值传递给嵌套作用域的变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql数据库的字符集_mysql数据库中字符集乱码问题原因及解决

前言有的时候我们在查看数据库数据时,会看到乱码。实际上,无论何种数据库只要出现乱码问题,这大多是由于数据库字符集设定的问题。下面我们就介绍一下,数据库的字符集的设定及乱码问题的解决。mysql数据库的字符集直白的说&#x…

加强计算机网络应用,如何加强计算机网络管理技术创新应用

车煜铭摘要:在社会的发展当中,计算机网络被普遍运用,因此,令人们对计算机网络的依赖性越来越大。长久以来,大部分计算机用户渴望获得一个稳定的网络氛围。为了符合这一需求,计算机网络管理系统随之诞生。其…

python基本语句

文章目录1.赋值语句序列赋值语句:多目标赋值语句:增强赋值语句:表达式语句2.条件语句和循环语句if语句:while循环:for循环:range计数器zip函数enumerate函数1.赋值语句 >>> a1 >>> b2 &…

mysql 经典面试_这些MySQL经典面试题你要知道!

1、MySQL的复制原理以及流程(1)、复制基本原理流程1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容&#xff…

html乱码框框,springmvc+font-awesome开发出的页面显示方框乱码的解决方法

在web.xml中配置如下:springorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:conf/spring-mvc.xml2spring/default*.cssdefault*.gifdefault*.jpgdefault*.pngdefault*.jpegdefault*.jsdefault*.svgdefault*.eotdefault*.woffdef…

1主5从mysql数据库_MySQL主从复制虽好,能完美解决数据库单点问题吗?

一、单个数据库服务器的缺点数据库服务器存在单点问题;数据库服务器资源无法满足增长的读写请求;高峰时数据库连接数经常超过上限。二、如何解决单点问题增加额外的数据库服务器,组建数据库集群;同一集群中的数据库服务器需要具有…

python基本对象类型

文章目录python对象类型1.数字2.字符串3.列表4.字典5.元组6.文件7.其他核心类型python对象类型 1.数字 例子 >>> 123222 345 >>> 1.5*399 598.5 >>> 2**10 1024 >>> 3.1415*2 6.283 >>> 9.99991 10.9999 >>> import …

html响应式五栏布局,HTML – 响应式2列CSS布局,包括固定宽度的侧边栏?

在任何地方找不到解决方案(我猜这一定是一个非常常见的问题).我正在创建一个带侧边栏的响应式设计,其中侧边栏需要具有200px的固定宽度并且具有未知高度.我怎样才能使主要内容区占据所有剩余的宽度,而不会有任何不当行为.最接近我的是以下内容,但问题在于侧边栏可以与页脚重叠.…

js语句连接mysql数据库_js中require()的用法----JS如何连接数据库执行sql语句或者建立数据库连接池...

var vue require(vue);引入vue的意思,commonjs的写法。node都是用require来载入模块的,可以看看webpackvue。require()可以调用模块。这不是就把vue模块命了个名吗?nodejs的写法,引入vue模块并命名为vue的意思。前端的东西&#…

(DFS)迷宫问题

题目: 从s到t,.意味着可以走,*意味着不能走,如果能走,输出路径,如果不能走,输出no。 输入: 5 6 ....S* .***.. .*..*. *.***. .T....输出: ....m* …

惠普z6计算机进不去桌面,HP Z6 桌面工作站 | HP® HK 惠普香港

Intel、Thunderbolt 及 Xeon 均為 Intel Corporation 於美國及/或其他國家或地區的商標。Microsoft 及 Windows 為 Microsoft Corporation 於美國及/或其他國家或地區的註冊商標或商標。NVIDIA 是 NVIDIA Corporation 在美國及其他國家或地區的商標及/或註冊商標。USB Type-C™…

mysql定义条件和处理_mysql sql存储过程条件定义与处理

一、条件定义DECLARE condition_name CONDITION FOR condition_valecondition_value:sqlstate[value] sqldata_value |mysql教程_error_code二、条件处理DECLARE htype HANDLER FOR cond_value[...] sp_statementhandtype_value:sqlstate [value] saltate_value|contentname|sq…

(DFS)跳马

题目: 马走日,不考虑别马脚,问马能否从S走到T,其中‘#’表示不能落下,‘.’表示能落下 输入: .#....#S# ..#.#.#.. ..##.#..# ......##. ...T..... ...#.#... ...#..... ...###... ......... .##......输…

长沙医学院学位计算机考试内容,湖南长沙医学院2017年9月计算机等级考试报名时间...

长沙医学院2017年下半年第49次全国计算机等级考试(以下简称NCRE)将于2017年9月23至25日举行。为做好本次考试报名及相关考务工作,现将有关事项通知如下:一、报名时间:2016年6月7日—2016年6月18日,逾期不接受任何理由的补报名。二…

(递推)常用递推式总结及实现

常用递推式 后面问题的解可以由前面问题的解递推而来,每一项都与前面若干项有一定关联。它是一种用若干步可以重复的简单运算来描述复杂问题的方法。 爬楼梯和兔子问题和斐波那契:f(n)f(n−1)f(n−2);f(1)1,f(2)1f(n)f(n-1)f(n-2) ; f(1)1,f(2)1 f(n)f…

mysql建表语句utf-8_mysql 创建utf-8数据集

之前数据库都是默认的‘latin1 ’,由于业务需求,需要把数据集修改为utf-8(1)创建一个新的数据库,并设置默认的格式为utf-8CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;(2) 将这个yourdbname 数据…

html读取servlet,简单html与servlet交互(HTML利用servlet读取txt)

1.usercheck.htmlhref"../lib/ligerUI/skins/Aqua/css/usertext.css" rel"stylesheet"type"text/css" />填写用户名/>id"verifyButton"/>>2.usertext.css.userClass {border: 1px solid red ;background-image:url(../../…

mysql dnslog_dnslog小技巧

一、dnslog利用场景主要针对无回显的情况。Sql-BlindRCESSRFRFI(Remote File Inclusion)二、原理将dnslog平台中的特有字段payload带入目标发起dns请求,通过dns解析将请求后的关键信息组合成新的三级域名带出,在ns服务器的dns日志中显示出来。三、案例展…

卷积积分

文章目录卷积积分信号的时域分解卷积公式卷积积分定义卷积积分图解法:卷积的性质:常用卷积重要公式卷积求解方法用梳状函数卷积产生周期信号矩形脉冲的卷积产生三角形和梯形脉冲自相关互相关函数定义相关与卷积卷积积分 本质:信号分解 f(t)…

2019哈佛计算机专业录取,2019哈佛大学早申请录取数据公布 录取率再降1个点仅为13.4%...

出结果了,出结果了,作为美国在全球范围内最负盛名的哈佛大学,与近日公布2019美国本科申请提前录取的相关数据。今年哈佛大学本科学院向6,968位在2023届提前录取轮次申请人中的935位发出了录取通知,申请录取率约为13.4%&#xff0c…