一、简介

函数是可重用的程序代码块。函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现。

函数用关键字def来定义,def关键字之后跟一个函数标识符名称。然后跟一对圆括号,圆括号中可以包括一些变量名,然后以冒号结束。如下所示:

def 函数名([参数列表]) :
函数体/若干语句
def num(a, b):
return a + b
print(num(10, 5))

执行结果为:

15

在这个函数中,我们创建了一个名为num的函数,并且给了两个变量a和b,最后返回a和b的和。在调用时,a和b的值不同则返回的和也会改变。

函数代表一个个任务和功能,使用函数可以减少代码的重复,从而提高效率。

二、函数的参数

函数取得的参数是我们提供给函数的值, 一般分为实际参数和形式参数,我们一般叫做实参和形参,形参是在定义函数时使用的参数,形式参数的命名要符合标识符的命名规则。实际参数是调用函数时传递的参数,如下例子中,a和b叫做形式参数,10和20叫做实际参数。

def num(a, b):
print(a + b)
num(10, 20)

三、全局变量和局部变量

全局变量:

1. 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。

2. 全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。

3. 全局变量一般做常量使用。

4. 函数内要改变全局变量的值,使用global 声明一下。

局部变量:

1.在函数体中(包含形式参数)声明的变量。

2.局部变量的引用比全局变量快,优先考虑使用。

3.如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量。

a = 20
def fun():
a = 2
print(a)
fun()
print(a)

运行结果:

在这个函数中调用函数时,第一次输出的a 是局部变量的a,在全局输出时输出的a是全局变量的a。如果要在函数块中使用全局变量则要使用global完成这一功能,如下所示:

a = 20
def fun():
global a
print(a)
a = 5
print(a)
fun()

输出结果:

在第一个变量a中,使用global声明,因此输出结果为全局变量a=20,第二次输出则是局部变量a=5。

局部变量的查询和访问速度比全局变量快,优先考虑使用,全局变量容易导致不知道变量出错,所以应该尽量少使用全局变量。

nonlocal 用来声明外层的局部变量。

global 用来声明全局变量。

四、命名参数

按照形参的名称传递参数,称为“命名参数”,也称“关键字参数”。

def num(a,b,c):
print(a,b,c)
num(1,2,3)
num(a=4, b=6, c=5)

在上述例子中,num(1,2,3)叫做位置参数,即按照位置来传递参数,num(a=4, b=6, c=5)叫做命名参数。

五、可变参数

可变参数指的是“可变数量的参数”。分两种情况:

1. *param(一个星号),将多个参数收集到一个“元组”对象中。

2. **param(两个星号),将多个参数收集到一个“字典”对象中。

def fun(a,b,*c,**d):

  print(a,b,c,d)

fun(1,2,3,4,5,six=6,seven=7)

输出结果:

在这个函数中,1和2分别传递给a和b,3,4,5则作为元组传递到可变参数c中,6,7以字典形式传递到d中。

五、LEGB 规则

Python 在查找“名称”时,是按照LEGB 规则查找的:

  • Local-->Enclosed-->Global-->Built in

1.Local 指的就是函数或者类的方法内部

2.Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)

3.Global 指的是模块中的全局变量

4.Built in 指的是Python 为自己保留的特殊名称。

如果某个名称映射在局部(local)命名空间中没有找到,接下来就会在闭包作用域

(enclosed)进行搜索,如果闭包作用域也没有找到,Python 就会到全局(global)命名空

间中进行查找,最后会在内建(built-in)命名空间搜索,如果都没有找到,则会报错NameError)。

04-Python函数的更多相关文章

  1. Python函数04/生成器/推导式/内置函数

    Python函数04/生成器/推导式/内置函数 目录 Python函数04/生成器/推导式/内置函数 内容大纲 1.生成器 2.推导式 3.内置函数(一) 4.今日总结 5.今日练习 内容大纲 1.生 ...

  2. Python函数讲解

    Python函数

  3. Day03 - Python 函数

    1. 函数简介 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print():也可以自己创建函数,这 ...

  4. Python 函数返回值

    本章详细介绍 返回值: 0x 00 返回值简介 0x 01 指定返回值与隐含返回值 0x 02 return 语句位置与多条 return 语句 0x 03 返回值类型 0x 04 函数嵌套 0x 0 ...

  5. 初识代码封装工具SWIG(回调Python函数)

    这不是我最早使用swig了,之前在写Kynetix的时候就使用了swig为python封装了C语言写的扩展模块.但是当时我对C++还不是很了解,对其中的一些概念也只是拿来直接用,没有理解到底是什么,为 ...

  6. (python函数03)zip()函数

    (python函数03)zip()函数 zip是用来压缩的,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个元组(tuple),然后返回有这些tuples组成的对象,可强制转化为列表和 ...

  7. python 函数之day3

    一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...

  8. Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  9. Python函数信息

    Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...

  10. ubuntu14.04 python自带版本升级

    ubuntu14.04 python自带版本升级 sudo add-apt-repository ppa:fkrull/deadsnakes-python2. sudo apt-get update ...

随机推荐

  1. FastStone+ImageReady+Kutools plus导入图片到Excel单元格

    先前打算自己做一个也附带训练下,发现有下面方法也好. 1)做帮助文档时需要一种格式(需要将图片导入到Excel中时,假如是按此法归类汇总) 2)FastStone滚动截图       粘贴到Photo ...

  2. 使用ansible实现批量免密认证

    一.目的 批量实现免密认证,适合管理大批量机器使用 二.步骤 1-1.第一种方式:收集被控制主机的公钥,用于构建并验证ssh_known_hosts # ssh-keyscan 10.246.151. ...

  3. ca70a_c++_重载函数_实参类型转换

    /*ca70a_c++_重载函数_实参类型转换转换等级,详见P290 编译选择哪个函数版本呢?1.精确匹配2.通过类型提升3.通过标准转换4.通过类类型转换参数匹配和枚举类型重载和const形参 vo ...

  4. CVE-2017-7269-iis远程溢出漏洞复现

    ##01漏洞描述 cve_2017_7269漏洞属于高危漏洞,是由Zhiniang Peng和Chen Wu(华南理工大学信息安全实验室,计算机科学与工程学院)发现的.IIS 6.0开启Webdav服 ...

  5. 【SEED Labs】DNS Rebinding Attack Lab

    Lab Overview 实验环境下载:https://seedsecuritylabs.org/Labs_16.04/Networking/DNS_Rebinding/ 在这个实验中模拟的物联网设备 ...

  6. redis高级命令2

    主服务负责数据的写,从服务器负责客户端的高并发来读 创建主从复制 clone不能让上面的mac地址不能重复,IP地址也不能重复 122和123是从服务器,我们修改二者的配置文件 其中 192.168. ...

  7. laravel Excel 导入

    <?php namespace App\Modules\Live\Http\Controllers; use Illuminate\Http\Request; use Maatwebsite\E ...

  8. DOM-BOM-EVENT(3)

    3.Node常用属性 childNodes 获取所有子节点 <div id="wrap"> <div>1111</div> <div> ...

  9. P5676 [GZOI2017]小z玩游戏【Tarjan】

    小z玩游戏 Tarjan算是板子题吧,但是要稍微做一些修改,建边需要多考虑,建立"虚点". 题目描述 小 z 很无聊. 小 z 要玩游戏. 小 z 有\(N\)个新游戏,第\(i\ ...

  10. Dynamics CRM 365 不用按钮工具,直接用js脚本控制按钮的显示隐藏

    Dynamics CRM 365 不用按钮工具,直接用js脚本控制按钮的显示隐藏: try { // 转备案按钮 let transferSpecialRequestButton = parent.p ...