python自动化笔记(二)——函数的作用域、内置函数

本文详细介绍了Python中函数的作用域,包括局部变量和全局变量的使用,强调了在函数内部修改全局变量需使用`global`关键字。此外,探讨了函数的返回值,包括无返回值、单个返回值、多个返回值的情况,并通过实例说明。还提到了匿名函数`lambda`的使用。最后,列举了一些常用的内置函数,如`eval()`、`enumerate()`、`zip()`和`filter()`,并阐述了它们的功能和用法。
摘要由CSDN通过智能技术生成

函数的作用域
一、局部变量和全局变量
1, 全局变量:函数外部定义的变量,直接定义在python文件(模块)
全局变量整个文件内容任何地方都可以使用

2, 局部变量:在函数内部定义的变量叫做局部变量,仅限于改函数内部使用

name = "小布偶"  #全局变量,任何地方都可以使用

def add(a, b):
    d = 1                # d是局部变量,只可以函数内部使用
    c = a + b + d        # 函数内部使用局部变量d
    print("调用", name)   # 函数内部调用全局变量name
    return c

res = add(11, 22)
print(res)
a = name       #函数外部调用全局变量
print(a)

输出结果如下:

调用 小布偶
34
小布偶

#a = d +1    #如果在函数外部调用局部变量d就会报错

3 ,如果想要在函数内部定义或者修改全局变量怎么办?

因为全局变量在函数内部可以使用,但是不能修改,若想在函数内部定义或者修改全局变量,需要用global来声明为全局变量。

number = 100
def func():

    global number  #声明 number为全局变量,就可以对number进行修改了
    number = number + 100

func()
print(number)

输出结果如下:
200

如果把global的声明去掉的话,number值就无法修改,代码会报错;另外如果想声明多个变量的话,可以在global后面跟上多个变量名,变量之间用逗号隔开。

4,函数内部变量引起的优先级问题
如果函数中的局部变量和全局变量同名,在函数内部使用这个变量的时候,会优先使用局部变量(函数中使用变量的时候,会优先使用局部变量)

注意点:函数内部定义局部变量时,尽量不要和全局变量同名

n = 100


def func():
    n = 9999
    print(n)


func()

输出结果如下:
9999

二、函数的返回值
函数的返回值:关键字return来实现
1 函数中没有return,默认调用后的返回值为None
2 return后面跟一个值:返回object
3 return后面跟多个值 : 返回tuple
4 当函数执行到return之后,就会结束函数的运行
5 return 后的值可以是任意类型数据

例子

--------- 函数没有return -------------

def add(a, b):
    c = a + b
    print(c)


res1 = add(11, 22)
print("add调用之后返回的结果:", res1)

输出结果如下:

33
add调用之后返回的结果: None

--------- return后面只有一个数据 -------------
返回object

def add(a, b):
    c = a + b
    return c


res2 = add(11, 22)
print("add调用之后返回的结果:", res2)

输出结果如下:

add调用之后返回的结果: 33

-------------return后面有多个数据--------------------
返回tuple

def add(a, b):
    c 
eval32 v3.2.6 Beta R1 ShellEval数学表达式动态解释计算扩展函数库 ========================================= 欢迎使用:ShellEval数学表达式动态解释计算扩展函数库。 当前最终发行版本:V3.2.6。最初作为一个实用的文本字符串解释器,可以帮助程序开发人员快 速地整合到自己的应用程序之中。随着版本的不断升级,功能也越发完善,现V3.2.6版本已包含字符串解释、数学计算、线性代数、动态编连等相关操作总计大约两百个导出接口函数,主要用于实现高级语言之间的动态解释计算与调用。 例如对MATLAB的不能实现的相关功能做了较大的扩充。关于V3.2.6以前各个旧版本的相关介绍在网上请自行下载。 ShellEvalV3.2.6不是对旧版本如EvalExprV1.4.4等的简单扩充,相反地,它在旧版本EvalExprV1.4.4 的基础上去掉了大部分与数值动态编连解释计算无关的函数,只保留了原先版本的主要核心算法,同时对核心算法的相应函数另外增加了一个在原函数同名函数的基础上加M 结尾的版本, 例tsEvalExpr 对应的函数是:tsEvalExprM。这类以M 结尾的函数提供了基于MatCom核心的矩阵运 算功能。虽然本函数库是基于MatCom Version 4.5.1开发而成的,但是使用它时并不需要用户安装拥有MatCom,只需要使用本函数库提供的相应接口即可实现。 众所周知,MatLab、MatCom等数学软件提供了大约上千个矩阵数值运算函数,但是对于表达式的动态解释执行却是不能够实现的。例如: eval(TM(“[1,2;3,4]”)); MatCom可以实现,但是其功能也仅限于此。如下最基本的调用: eval(TM(“sin([1,2;3,4])”)); 等皆不能实现。而MatLab 虽然可以利用计算引擎技术与DDE 动态数据交换技 术间接实现字符串表达式的动态解释执行,但是效率低下,更重要的是,它要求用户机器上必须安装有匹配版本的体积庞大的MatLab,实际软件发布时是难以保证的。 本函数库主要用于对MATLAB、MatCom、MATFOR等矩阵运算软件表达式动态解释执行的扩展,利用它可以实现非常复杂的表达式计算,无论在表达式类 型种类还是矩阵运算方面都远非网络上的其他一些表达式计算控件可比。 例如计算上式,如下: #include “eval32.h” ... ... tsInitialize(NULL,NULL,NULL); tsMatrix * vValue = tsAllocM(1); INT nRetFlag = tsEvalExprM(_T(“sin([1,2;3,4])”),vValue); if(nRetFlag >= 0){ tsDispM(vValue); }else{ _tprintf(_T(“Eval Failed\n”)); } tsFreeM(vValue); vValue = NULL; tsTerminate(); 可以看出利用本函数库完全无需依赖于MatLab、MatCom或者其他第三方软件,当然你也可以结合它们使用,使得程序开发更加得心应手。 利用本工具你甚至可以只用四条语句即可编制一个迷你版的MatLab 软件。 如下: #include “eval32.h” int main(int argc, char* argv[]) { tsInitialize(NULL,NULL,NULL); atexit((void (*)())(tsTerminate)); tsShellEvalM(); tsTerminate(); return 0; } 怎样?够简单吧!但是生成的迷你版MatLab功能可不容小觑。为了运行之,需要将以下动态链接支持库复制到程序搜索目录下: eval32.dll 、ago4501.dll、v4501v.dll。 关于本函数库内核及具体使用方法以下将有介绍。 本函数库仿照Math Tools公司的MatCom与Math Works公司的MatLab制作开发,相信对于数值计算与混合编程的各位程序爱好者与开发人员有所帮助。 ==========eval32 ver3.2.6 beta============= 在 V3.2.3 基础上进行了代码的重新规范化编写。此 版本除在原先的基础上增加了少量功能之外,实现 算法并未加以重大修改。此版本并不与原先任何版 本兼容。 ==========ShellEval Ver3.2.6 ============= 筆者按。 2010、09、18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值