1.简介

在Python中定义函数的基本格式为:

def <函数名>(参数列表):
<函数语句>
return <返回值>

Python中的函数形式比较灵活,声明一个函数不需要声明返回值类型,也不需要声明参数类型。在使用函数之前必需先定义函数。

下面是一个基本使用案例:

'''
多行注释:定义sum函数,求和。
'''
def sum(t):
result = 0;
for e in t:
result+=e;
return result;
#单行注释:将set对象传入sum函数
res = sum({1,2,3,4});
print(res);

2.global全局变量

2.1 global关键字的使用

Python中变量作用域分为局部作用域、全局作用域和内置作用域。

def test():
print(a);
a = "hello world";
test();

输出:

hello world

当执行到print(a)的时候,会在test()函数中搜索变量a,如果test()作用域中没有变量a,那么它会去全局作用域中搜索变量a。

上面案例中变量a的作用域是全局作用域。若函数中也有一个局部作用域变量a,那么会发生什么呢?

def test():
a = "i am in internal";
print(a);
a = "i am in external";
test();
print(a);

输出:

i am in internal
i am in external

这个输出结果是我们预期之内的,从结果可以看出,当在局部作用域和全局作用域中有相同的变量名时,在局部作用域之内以局部作用域的变量名为准,在局部作用域之外以全局作用域的变量名为准。

如果想在局部作用域之内使用全局作用域的变量,那么可以使用global关键字:

def test():
global a;
a = "hello world";
print(a);
a = "i am in external";
test();
print(a);

输出:

hello world
hello world

2.2 globals()和locals()的使用

在Python中可以使用locals()来访问局部命名空间中变量,例如:

def functest(i,str):
x = 12345
print(locals())
functest(1,"test")

输出:

{'x':12345,'str':'test','i':1}

内置函数globals()用来访问全局命名空间中变量,例如:

if '__main__' == __name__:
print(globals())

输出:

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/home/test1.py', 'x': 12345}

Python中的globals()函数和locals()函数的返回值数据类型都是Dictionary,但是locals()返回的是局部命名变量的副本;而globals()返回的是实际的全局命名空间,所以任何对globals()的改变都会影响到全局变量。

def funtest(i):
print('局部变量 i = ',locals()['i'])
print("修改局部变量 locals()['i']=12 ")
locals()['i'] = 12
print('局部变量 i = ',locals()['i'])
y = 1
if '__main__' == __name__:
funtest(y)
print('----------------')
print('全局变量 y = ',globals()['y'])
print("修改全局变量 globals()['y']=12")
globals()['y'] = 12
print('全局变量 y = ',globals()['y'])

输出:

局部变量 i =  1
修改局部变量 locals()['i']=12
局部变量 i = 1
----------------
全局变量 y = 1
修改全局变量 globals()['y']=12
全局变量 y = 12

从上面的结果可以看出,globals()和locals()虽然都返回Dictionary的数据类型,但是任何对globals()的修改都会影响到全局变量,但是对locals()的修改不会影响到任何局部变量。

3.不定长参数

不定长参数也被称为可变参数,在定义变长参数的时候只需要在变量前面加上星号“*”。变长参数的形参类型是元组类型(tuple),若不传入任何参数那么它就是一个空元组。

def printinfo(num,*vartuple):
print("接下来会打印 ",num," 个参数");
for a in vartuple:
print(a); printinfo(3,"how","are","you");

输出:

接下来会打印3个参数
how
are
you

Python中除了单个星号的可变参数,还有两个星号的可变参数(**),两个星号的可变参数表示关键字参数,它本质上是一个dict,下面的代码展示了如何使用。

def fun(**kwargs):
for key, value in kwargs.items():
print("{0} 喜欢 {1}".format(key, value)) fun(Geek="cat", cat="box")

输出:

Geek 喜欢 cat
cat 喜欢 box

4.匿名函数

在Python中,lambda的语法是唯一的。其形式如下:

 lambda argument_list: expression

其中,lambda是Python预留的关键字,argument_list和expression由用户自定义。具体介绍如下。
1.这里的argument_list是参数列表。它的结构与Python中函数(function)的参数列表是一样的,argument_list可以有非常多的形式。
2.这里的expression是一个关于参数的表达式。表达式中出现的参数需要在argument_list中有定义,并且表达式只能是单行的。

lambda函数示例:

lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y
lambda:None;函数没有输入参数,输出是None
lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算)
lambda **kwargs: 1;输入是任意键值对参数,输出是1

例如:

f = lambda x, y: x*y  #声明lambda表达式
res = f(2,3) #调用函数

将lambda函数作为参数传递给其他函数:

filter函数。此时lambda函数用于指定过滤列表元素的条件。例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。

sorted函数。此时lambda函数用于指定对列表中所有元素进行排序的准则。例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。

map函数。此时lambda函数用于指定对列表中每一个元素的共同操作。例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。

reduce函数。此时lambda函数用于指定列表中两两相邻元素的结合条件。例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。

【Python】解析Python中函数的基本使用的更多相关文章

  1. 用python解析pdf中的文本与表格【pdfplumber的安装与使用】

    我们接触到的很多文档资料都是以pdf格式存在的,比如:论文,技术文档,标准文件,书籍等.pdf格式使得用机器从中提取信息格外困难. 为了解决这个问题,我找到了几种解决方案,最后选择了python上的p ...

  2. python解析excel中图片+提取图片

    解析表格是常用的技术.但是有些表各里面有图片怎么办?我想获得表格里面的图片,值得注意的是,图片没有位置信息,所以最好给图片进行编号,编号代表位置. 下面附上提取表格里面图片的代码.只要输出表格地址,和 ...

  3. Python解析CSV中的多维字典

    CSV文件结构如下,其中字段A为唯一 代码如下,Python27 with open(file_obj+'TEST.CSV','r') as f: #转为字典 Reader=csv.DictReade ...

  4. python解析网页中js动态添加的内容

    https://www.cnblogs.com/asmblog/archive/2013/05/07/3063809.html https://www.zhihu.com/question/21471 ...

  5. 从json到python解析python,从bson到monogdb

    1.JSON JSON是JavaScript Object Notation的缩写,中文译为JavaScript对象表示法.用来作为数据交换的文本格式,作用类似于XML,而2001年Douglas C ...

  6. python中函数的参数解析

    python中函数的各种参数梳理: 1.形参:函数定义时传入的参数 2.实参:函数调用时传入的参数 (有形参必传实参,形参里自身特点可不传的,可传可不传) 3.缺省参数:不传为默认值,传了会覆盖(下面 ...

  7. python 中函数的参数

    一.python中的函数参数形式 python中函数一般有四种表现形式: 1.def function(arg1, arg2, arg3...) 这种是python中最常见的一中函数参数定义形式,函数 ...

  8. python 中函数参数传递形式

    python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...

  9. python中函数嵌套、函数作为变量以及闭包的原理

    嵌套函数: python允许创建嵌套函数.也就是说我们可以在函数里面定义函数,而且现有的作用域和变量生存周期依旧不变. 例子: #encoding=utf-8 def outer():    name ...

随机推荐

  1. Java集合学习(5):LinkedHashMap

    一.概述 HashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方.所以在按照一定顺序put进HashMap中,然后遍历出HashMap的顺序跟 ...

  2. Maven基础。

    ---恢复内容开始--- Maven: 1.概念. * maven 是一个项目管理工具. * maven的作用. 1.jar包.依赖管理.将jar包放在jar包仓库(pom.xml),不需要每个项目都 ...

  3. org.apache.catalina.core.StandardService - Stopping service [Tomcat]

    今天在启动springboot项目突然启动失败,但是在测试日志文件,以为是日志出错,下面这个是logback打印的异常信息. 2019-05-30 15:09:10.686 [restartedMai ...

  4. 如何处理动态JSON in Go

    假如要设计一个统计的json解析模块,json格式为 { "type": "用来识别不同的json数据", "msg": "嵌套的 ...

  5. C语言中指针和数组

    C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之 ...

  6. zabbix--监控MySQL主从状态

    zabbix监控MySQL主从状态 搭建MySQL主从后,很多时候不知道从的状态是否ok,有时候出现异常不能及时知道,这里通过shell脚本结合zabbix实现监控并告警 一般情况下,在MySQL的从 ...

  7. PAT甲级1017题解——模拟排序

    题目分析: 本题我第一次尝试去做的时候用的是优先队列,但是效率不仅代码量很大,而且还有测试样例过不去,很显然没有找到一个好的数据结构来解决这道题目(随着逐渐的刷PAT甲级的题会发现有时选择一个好的解题 ...

  8. 项目Beta冲刺(6/7)(追光的人)(2019.5.28)

    所属课程 软件工程1916 作业要求 Beta冲刺博客汇总 团队名称 追光的人 作业目标 描述Beta冲刺每日的scrum和PM报告两部分 队员学号 队员博客 221600219 小墨 https:/ ...

  9. python 应用开发之-用base64 对图片文件的编码和解码处理

    用base64 对图片文件的编码和解码处理 import base64 def convert(image): f = open(image) img_raw_data = f.read() f.cl ...

  10. nginx 获取源IP 获取经过N层Nginx转发的访问来源真实IP

    1. nginx 配置文件中获取源IP的配置项 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #一般的we ...