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. http://www.jb51.net/article/51934.htm

    这篇文章主要介绍了mysql优化limit查询语句的5个方法,它们分别是子查询优化法.倒排表优化法.反向查找优化法.limit限制优化法和只查索引法,需要的朋友可以参考下   mysql的分页比较简单 ...

  2. MySQL Table--MySQL外键

    在之前的MySQL运维中,要求禁用触发器/存储过程/外键等一些数据库常见功能,因此对MySQL外键也相对比较陌生,今天特地探究下. 现有表TB001和TB002各包含6291456行数据,创建脚本如下 ...

  3. C#-Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046}

    异常信息如下 捕获到执行这句时异常: Excel.Application ep = new Excel.ApplicationClass(); Retrieving the COM class fac ...

  4. 环境搭建:Jupyter Notebook 密码设置

    原文参考:关于jupyter notebook密码设置 原文博主: 一.windows下,打开命令行,重新生成一个jupyter配置文件 jupyter notebook --generate-con ...

  5. 【Git】.DS_Store 是什么文件

    一.为啥会注意到该文件 合并代码的时候,.DS_Store文件发生了冲突,然后进入到项目目录去看,果然存在该文件,就比较好奇该文件是干什么的. 二..DS_Store 是什么文件 .DS_Store( ...

  6. oracle 字符集安装错了,修改字符集 及创建用户 表空间 ,删除用户及所有的表

    1.首先以sysdba的身份登录上去 conn /as sysdba 2.关闭数据库shutdown immediate; 3.以mount打来数据库,startup mount 4.设置sessio ...

  7. Zipkin 知识点

    在Spring Cloud D版本,zipkin-server通过引入依赖的方式构建工程,自从E版本之后,这一方式改变了,采用官方的jar形式启动. 出处:https://juejin.im/post ...

  8. O2O项目之一 环境搭配

    技术栈:vue全家桶(使用nuxtjs:https://zh.nuxtjs.org/guide/installation  ) + ssr + redis + mongodb + wabpack + ...

  9. python-随机生成验证码实例

    需求:随机生成验证码, 思路: 1.生成一个随机数,65-90 2.数字转化为字母:chr(数字) #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...

  10. vue项目开发期间,配置webpack解决后台接口在不同服务器上的问题 之 二 ( node搭建服务 )

    由于今天上午 后端人员把接口都整合都一个服务器了,所以就没有硬关注 上一篇文章的问题, 晚上回来,用node搭了一个简单服务器,测试了下,是没有问题的.代码如下: 一. 自己初始化项目, 1.pack ...