python 函数的使用
python函数是一个很有用的工具,可以解决很多重复性的工作。它就好比是我们经常干的一件事,把一些经常要用的东西做成模板,之后每一次使用时,创建一个副本即可。
而在python中,我们管他叫封装,相关的操作会更加方便一些,因为不需要再创建一个副本,而是直接调用,具体怎么调用呢,在文中用代码给大家揭晓。
先上一张图看看本文的知识架构:
学一个东西,一般我们应该问几个问题:学什么、为什么学、怎么学。
一、学什么
学函数,函数是什么,函数是组织好的、可以重复使用的、用来实现单一功能的代码。
简单的函数像:
def func():print('Hello world!')
该函数就是把Hello world!
封装起来,每次我们调用func()
的时候就可以直接打印Hello world!
了,是不是很简单。
当然,如果仅仅是打印Hello world!
大可不必这么大费周章,但是可以想想要是其他很复杂的一些逻辑呢,是不是就很有必要了呢?
二、为什么学
除了开头说到的高效处理任务之外,还有一点很重要的,降低耦合度,就是把解决某一个任务的代码封装起来,如果需要执行该代码,直接调用函数就可以了。有点像python模块的概念。
三、怎么学,学完怎么用
怎么学,学完怎么用,来跟着我过一遍吧。
下面就不分什么函数定义和调用了,其实定义就是使用def
关键字,根据格式写一遍即可。而调用更简单<函数名>(<参数>)
即可。
3.1 首先,函数有什么?
函数有函数名、参数、函数体,通过以下代码可以快速过一遍这些概念。
def 函数名(参数1,参数2,...参数n): 函数体
这三大部分便是构成函数的主要成分。每一个部分都有一些“学问”。
3.1.1 函数名
先来看看函数名,函数名和变量名的命名逻辑差不多,不能数字开头,多个词关联只能用下划线,函数名也可以用中文哦!如果想试试中文编程,可以用中文的名称试试。
另外,注意一点,名字尽量和所实现的功能相近,特别在函数比较多的情况下,方便理解。
3.1.2 参数
参数的类别比较多,有位置参数,默认参数,不定长参数,关键参数。
- 位置参数:就是跟参数所在的位置相关,涉及到参数的顺序,其实有点像列表或元组,每一个参数有一个位置标签,传入参数时按照位置标签一一匹配。如下代码,我创建了一个叫
Say_Hello
的函数,函数有两个参数:greet
和objects
,greet是问候语变量,objects是问候对象变量。我后面调用的时候,按顺序传入('Hello','world')
就可以打印出Hello world!
。如果我改用Say_Hello('world','Hello')
是否可以呢?大家可以试试。代码不会报错,但是结果便反过来了,变成了world Hello!
。
def Say_Hello(greet, objects): # 定义函数print('%s %s!'%(greet, objects))
Say_Hello('Hello','world') # 该句为调用函数,打印结果为:Hello world!
- 默认参数:给参数赋一个值,作为默认值,如果不传参数则采用默认值。注意,默认参数要放在位置参数后面。如下代码,给
greet
加上一个默认值,则参数要放在objects
后面,传参时可以不用传,也可以重新传一个覆盖已有的值。
def Say_Hello(objects,greet='Hello'):print('%s %s!'%(greet, objects))
Say_Hello('world') # 打印结果为:Hello world!
Say_Hello('world','Hi') # 打印结果为:Hi world!
- 关键参数:这个看字面意思看不怎么出来,文字也不好描述,其实就是调用的时候,指定参数赋值,直接看看代码,便可理解。如下代码,最后一行调用参数时,指定关键字赋值,这时可以不用按顺序传参。
def Say_Hello(objects,greet='Hello'):print('%s %s!'%(greet, objects))
Say_Hello(greet='Hi',objects='world') # 打印结果为:Hi world!
- 不定长参数:不限制参数个数,可以传一个或多个,以元组形式返回。返回的时候也是以元组的格式返回。如果要将元组元素分别取出来,可以使用
join()
。
def Say_Hello(greet, *objects):print('%s %s!'%(greet, objects))# print('%s %s!'%(greet,'、'.join(objects)))
Say_Hello('Hello','world') # 打印结果为:Hello ('world',)!
Say_Hello('Hello','world','明而决之') # 打印结果为:Hello ('world', '明而决之')!
3.1.3 函数体
函数体是所有实现功能的代码。函数体涉及到函数的返回值,关键字为return
。返回值可用于赋值,再次利用,而直接print()
则不行。
函数体遇到return
之后就停止执行并将结果返回。当一个函数没有return
时,返回None
。
def Say_Hello(greet, objects):return ('%s %s!'%(greet, objects))print('该句不打印!')
sayhello_val = Say_Hello('Hello','world')
print(sayhello_val) # 打印结果为:Hello world!
3.2 其次,函数需要注意什么
了解了函数有什么之后,基本上可以自由地使用函数了。但是使用过程中,可能会出现一些bug。最典型的一个就是变量的作用于。
在函数内部定义的变量,称为局部变量,只能作用于函数内部(相当于是私人物品),函数外调用便会出错。在函数外部定义的变量,称为全局变量(相当于是公共物品),函数内外都可以调用。
### 代码一
# 全局变量greet
greet = 'Hello'
def Say_Hello(objects):# 调用全局变量print('%s %s!'%(greet,objects))
Say_Hello('world')
print(greet) # 调用全局变量
### 代码二
def Say_Hello(objects):# 局部变量greet = 'Hello'print('%s %s!'%(greet,objects))
Say_Hello('world')
print(greet) # 调用局部变量报错
函数内定义的变量虽然属于“私人物品”,但是“私人物品”也可以被分享出来,成为“公共物品”,这个过程的转变,可以通过一个关键字搞定——global
。
### 代码三
def Say_Hello(objects):# 声明为全局变量global greetgreet = 'Hello'print('%s %s!'%(greet,objects))
Say_Hello('world')
print(greet) # 不会报错
3.3 最后,函数还可以做什么
函数除了上面讲的功能,其实还有很多有趣的玩法,比如函数闭包、函数装饰器、匿名函数、
3.3.1 闭包
其实就是函数里再嵌入一个函数,里层函数将结果返回给外层函数,调用外层返回内层函数(是返回,而不是调用,所以不需要加括号),然后在函数外调用函数的时候就返回一个函数,如果要获得最终的结果,需要再调用一次。适合一些暂时不需要返回结果,而是传递函数的场景。需要结果时再进行调用打印。
def Say_Hello(greet,*objects):def Hello():names = '、'.join(objects)return '%s %s!'%(greet,names)return Hello # 注意,没有括号
aa = Say_Hello('Hello','world','明而决之')
aa()
3.3.2 函数装饰器
给函数增加新的功能,但又不修改原来的函数,而是使得调用原函数的时候附加一些功能。如下,调用Say_Hello()
函数的时候,加上一句:Call Say_Hello():
。
# 定义一个装饰器,传入要装饰的目标函数
def Self_Introduction(func): # 传入目标函数def wrapper(*args,**kw):print('Call %s():'% func.__name__) # 获取函数名return func(*args,**kw) # 返回要装饰的目标函数的结果,注意这里是调用,所以直接给结果,而不是返回函数,调用时便会打印结果return wrapper# 将装饰器加到Say_Hello()函数上
@Self_Introduction
def Say_Hello(greet, objects):print('%s %s!'%(greet, objects))
## 调用函数
Say_Hello('Hello','world')
## 打印结果:
## Call Say_Hello():
## Hello world!
3.3.3 匿名函数
一般用于过程的处理,关键字是lambda
,一般简单的函数可以通过lambda
函数来实现。下同通过代码来理解,像代码一中的函数就是一个简单的print()
语句,其中对objects
参数进行处理。这种就可以通过lambda
函数进行改写。
lambda
函数的格式是在lambda
后面跟参数,同普通函数的参数,然后冒号,加上处理逻辑即可。lambda
函数用于处理数据会比较多一些,像用pandas或numpy处理数据的时候,经常要传入一个简单的函数处理数据,通过lambda
处理会比较简洁、方便。
### 代码一
def Say_Hello(greet, *objects):print('%s %s!'%(greet,'、'.join(objects)))
Say_Hello('Hello','world','明而决之') # 打印结果为:Hello world、明而决之!
### 代码二
Say_Hello = lambda greet,*objects:print('%s %s!'%(greet,'、'.join(objects)))
Say_Hello('Hello','world','明而决之') # 打印结果为:Hello world、明而决之!
四、小结
本文讲了函数的使用。
1、函数是什么?就是一个封装好的代码。
2、为什么要学习函数?降低耦合、减少重复代码、提高效率。
3、怎么学函数?从函数的构成入手,学习函数的函数名命名方式、参数的种类、函数体中的返回关键字,以及函数中的变量的作用域。
- 函数名:不能数字开头,多个词关联只能用下划线,函数名也可以用中文命名。
- 参数的种类:位置参数、默认参数、关键参数、不定长参数。
- 函数体中返回关键字:
return
,函数体遇到return
之后就停止执行并将结果返回。 - 函数中变量的作用域:仅用于函数内,可以通过
global
关键字声明为全局变量。
最后再讲到函数的一些拓展知识点,包括函数的闭包、装饰器、匿名函数。
- 闭包:返回里层函数,需要时再使用结果。
- 装饰器:给函数增加新的功能,但又不修改原来的函数。
- 匿名函数:处理逻辑简单的函数,简洁、方便。
python 函数的使用相关推荐
- Pass算子python 函数
Pass算子python 函数 函数 • 函数是代码的一种组织形式 • 函数应该能完成一项特定的工作,而且一般一个函数只完成一项工作 • 有些语言,分函数和过程两个概念,通俗解释是,有返回结果的是函数 ...
- Python 函数的可变参数(*paramter与**paramter)的使用
Python 函数的可变参数主要有 *paramter与**paramter 可变参数主要有 *paramter的作用 接受任意多个实际参数并放到一个元组中 def people(*people):f ...
- 【python教程入门学习】Python函数定义及传参方式详解(4种)
这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...
- python系统提供构造函数传入参数_[ Python入门教程 ] Python函数定义和使用
函数是一段可以重复多次调用的代码,通过输入的参数值,返回需要的结果.通过使用函数,可以提高代码的重复利用率.本文主要介绍Python函数的定义.调用和函数参数设置方法. 函数的定义 Python函数定 ...
- python函数第二次运行报错_Python学习笔记2-函数、高级特性
函数 调用函数 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数 >>> abs(100) 100 >>> abs(-20) 20 ...
- [教程]Python函数的参数
Python函数的参数 位置参数.默认值参数.可变参数.关键字参数和命名关键字参数 1 函数结构 def 函数名(参数):函数体返回值 2 位置参数 略 3 默认值参数 略 4 可变参数 # 可变长度 ...
- python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce、map、filter)
python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce.map.filter) Python 中函数的应用非常广泛,比如 input() .print().range( ...
- python函数参数*arg和**kwargs分别代表什么?
python函数参数*arg和**kwargs分别代表什么? 注意: 注意:参数arg.*args.**kwargs三个参数的位置必须是一定的.必须是(arg,*args,**kwargs)这个顺序, ...
- python 函数 默认参数
python 函数 默认参数 def add(a=1, b=2): # a,b设置默认参数c = a + breturn c c = add(a=2) # 如果不填,就是默认参数 print(c) 4
- Python的零基础超详细讲解(第十二天)-Python函数及使用
基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...
最新文章
- python求5_python(五)——运算符,小整数对象池
- asp.net如何读取Excel文件
- Spring Boot开启的2种方式
- oracle to pgsql,PostgresToOracle
- Java 程序执行过程的内存流程图(手写稿)
- google 确定某点海拔高_一份“高投资回报率”的用户体验度量方法指南
- 2017春季学期编译原理期末实验报告
- C语言 数组中删除指定字符
- Python基本知识
- js 异步执行_js执行机制:同步与异步(宏任务与微任务)
- Hadoop之HDFS(二)HDFS基本原理
- jq ajax异步上传文件,jQuery Ajax上传文件
- 计算机考试系统客户端网址,[中学]计算机基础测评系统考试客户端操作步骤.doc...
- C#【必备技能篇】注册dll+批量注册dll
- 6. 测度论-期望及其性质
- html 实现蒙板效果,用css3实现ps蒙版效果+动画
- 读取yaml文件出现UnicodeDeco: ‘gbk‘ codec can‘t decode byte 0xaf in position 68: illegal multibyte sequen报错
- 重温Python基础——字符串
- chrome无痕模式可访问但正常模式访问不了
- VC++ Hook截取鼠标点击窗口消息的问题!全局钩子
热门文章
- 【2019CVPR学习】翻译-Graph Attention Convolution for Point Cloud Semantic Segmentation
- 用户使用报告_2020年抖音用户画像报告[附下载] | 行业数据报告研读
- python下载量化策略_掘金量化Python经典策略.pdf
- 唐池科技-GetWork协议
- Influx-stress原理(初学)
- 医学图像分割 | U-Net网络及他的变体
- vxe-table踩坑,表格操作列按钮不出现问题
- 汇编语言与计算机硬件有关吗,汇编语言和硬件的关系
- 怎么让word在分页后在下一页第一行自动加上上一页未结束的标题,并在后加一个“续”字?如图:
- 医用离心机,医院检验科常用离心设备