1、函数 function

定义

用于封装一个特定的功能,表示一个功能或者行为。

函数是可以重复执行的语句块, 可以重复调用

作用

提高代码的可重用性和可维护性(代码层次结构更清晰)。

定义函数

  • 语法:

def 函数名(形式参数):

     函数体

  • 说明:

def 关键字:全称是define,意为”定义”。

函数名:对函数体中语句的描述,规则与变量名相同。

形式参数:方法定义者要求调用者提供的信息。

函数体:完成该功能的语句。

  • 函数的第一行语句建议使用文档字符串描述函数的功能与参数。

2、调用函数

语法:函数名(实际参数)

说明:根据形参传递内容。

3、返回值

  • 定义:

方法定义者告诉调用者的结果。

  • 语法:

return 数据 

  • 说明:

return后没有语句,相当于返回 None。

函数体没有return,相当于返回None。

4、可变/不可变类型在传参时的区别

  • 不可变类型参数有:

数值型(整数,浮点数,复数)

布尔值bool

None 空值

字符串str

元组tuple

固定集合frozenset

  • 可变类型参数有:

列表 list

字典 dict

集合 set

  • 传参说明:

不可变类型的数据传参时,函数内部不会改变原数据的值。

可变类型的数据传参时,函数内部可以改变原数据。

代码示例一:

l1 = ["123"]
l2 = ["abc"]def fun(p1, p2):# 切片赋值会修改原列表p1[:] = ["1"]# 浅拷贝,修改拷贝后的对象不影响原对象temp = p2[:]temp = ["a"]fun(l1, l2)
print(l1)  # ['1']
print(l2)  # ['abc']

5、实参传递方式argument

位置传参

定义:实参与形参的位置依次对应。

序列传参

定义:实参用*将序列拆解后与形参的位置依次对应。

def func(a, b, c):print(a)print(b)print(c)l = [10, 20, 30]
s = "abcd"
func(*l)  # *可以解开列表、元组、字符串等序列
func(*s)  # 报错,解开后数量对不上TypeError: func() takes 3 positional arguments but 4 were given

关键字传参

定义:实参根据形参的名字进行对应。

字典关键字传参

定义:实参用**将字典拆解后与形参的名字进行对应。

作用:配合形参的缺省参数,可以使调用者随意传参。

def fun(a, b, c):print(a)print(b)print(c)d = {"a": 10, "b": 20, "c": 30}fun(**d)
# 字典的key一定要跟形参是一样的否则报错
# 10
# 20
# 30

6、形参定义方式parameter

缺省(默认)参数

语法:

def 函数名(形参名1=默认实参1, 形参名2=默认实参2, ...):

      函数体

说明:

缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数。

缺省参数可以有0个或多个,甚至全部都有缺省参数。

位置形参

语法:

def 函数名(形参名1, 形参名2, ...):

函数体

星号元组形参

语法:

def 函数名(*元组形参名):

  函数体

作用:

收集多余的位置传参。

说明:

一般命名为'args'

形参列表中最多只能有一个

命名关键字形参

语法:

def 函数名(*, 命名关键字形参1, 命名关键字形参2, ...):

函数体

def 函数名(*args, 命名关键字形参1, 命名关键字形参2, ...):
            函数体

作用:

强制实参使用关键字传参

def func(*args, p1, p2):print(*args)print(p1)print(p2)func(1, 11, 1, 1, p1=1, p2=1000)  # 因为前面的*args 所以后面的参数传参时必须一样,强制命名
func(1, 11, 1, 1, p0=1, p2=1000)  # TypeError: func() got an unexpected keyword argument 'p0'

双星号字典形参

语法:

def 函数名(**字典形参名):

函数体

作用:

收集多余的关键字传参

说明:

一般命名为'kwargs'

形参列表中最多只能有一个

def func(**kwargs):print(kwargs)func(a=10)  # {'a': 10}
func(a=1, b=2)  # {'a': 1, 'b': 2}

参数自左至右的顺序

位置形参 --> 星号元组形参 --> 命名关键字形参 --> 双星号字典形参

7、作用域LEGB

作用域:变量起作用的范围。

Local局部作用域:函数内部。

Enclosing  外部嵌套作用域 :函数嵌套。 

Global全局作用域:模块(.py文件)内部。 

Builtin内置模块作用域:builtins.py文件。

8、变量名的查找规则

由内到外:L -> E -> G -> B

在访问变量时,先查找本地变量,然后是包裹此函数外部的函数内部的变量,之后是全局变量,最后是内置变量。

# global全局作用域   当前模块
a = 100def change():a = 2# 局部作用域,当前函数内部,inner_func函数的外部def inner_func():# 局部作用域a = 1print(a)inner_func()print(a)change()
# 1
# 2

9、局部变量

定义在函数内部的变量(形参也是局部变量)

只能在函数内部使用

调用函数时才被创建,函数结束后自动销毁

10、全局变量

定义在函数外部,模块内部的变量。

在整个模块(py文件)范围内访问(但函数内不能将其直接赋值)。

11、global 语句

作用:

在函数内部修改全局变量。

在函数内部定义全局变量(全局声明)。

语法:

global 变量1, 变量2, …

说明

在函数内直接为全局变量赋值,视为创建新的局部变量。

不能先声明局部的变量,再用global声明为全局变量。

12、nonlocal 语句

作用:

在内层函数修改外层嵌套函数内的变量

语法

nonlocal 变量名1,变量名2, ...

说明

在被嵌套的内函数中进行使用

def func1():a = 10def func2():nonlocal aa += 1print(a)func2()print(a)func1()  # 11 11

13、locals()

locals()

会收集当前所有的局部变量  保存为字典

PythonBase(二)相关推荐

  1. 可信认证之九阴真经二

    可信认证之九阴真经二 - heiheidetiankong - 博客园2.3.6 最低成本联通所有城市(1135_会员) 2.3.6.1 最小生成树 (https://blog.csdn.net/lu ...

  2. 条形码?二维码?生成、解析都在这里!

    二维码生成与解析 一.生成二维码 二.解析二维码 三.生成一维码 四.全部的代码 五.pom依赖 直接上代码: 一.生成二维码 public class demo {private static fi ...

  3. 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发

    基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...

  4. 2022-2028年中国二次供水产业发展动态及投资战略规划报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国二次供水行业市场行业相关概述.中国二次供 ...

  5. 2022-2028年中国二次供水设备行业研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国二次供水设备行业市场行业相关概述.中国二 ...

  6. OpenCV 笔记(08)— 二维点、三维点、基于 Mat 的 std::vector 等常用数据结构的定义和输出

    1. 定义和输出二维点 Point2f p2(3, 4);cout << "[二维点] is "<< endl << p2 << e ...

  7. python内置库之学习ctypes库(二)

    ctypes库踩坑日记2 一.自己实现一个dll文件,再用python的ctypes库调用思路1更清晰 二.生成dll文件 三.ctypes库调用 一.自己实现一个dll文件,再用python的cty ...

  8. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

  9. Bert代码详解(二)重点

    这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...

最新文章

  1. 推荐一款 Spring Boot 的 HTTP 客户端框架
  2. python解释器内建函数002
  3. jQuery UI resizble、draggable的div包含iframe导致缩放和拖拽的不平滑解决方法
  4. [LeetCode] 4Sum II 四数之和之二
  5. opencv 把3通道图像转成单通道_小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算
  6. 搭建Servlet在线视频
  7. windows商店_Windows记事本应用现在可以从Microsoft Store中获得
  8. WebSocket使用中Stomp Client连接报ERROR CODE 200的解决办法
  9. 信息学奥赛一本通(1158:求1+2+3+...)
  10. Malta中any函数
  11. (1) python 将numpy数组导出excel
  12. 【Unity3D日常BUG】Unity3D中使用高亮插件Highlighting出现的错误:Parameter name:shader
  13. wxParse空格解析不生效的解决方案
  14. riot修改服务器,riot改地区教程
  15. 影视动画专业有木有c语言,那些头秃的专业,不了解一下?
  16. 经典!智能车牌识别称重系统解决方案
  17. clickhouse中bitmap在用户标签,访客去重生产中使用及clickhouse建表null值数据类型处理
  18. 移动通讯技术的发展历史
  19. BERT用的LayerNorm可能不是你认为的那个Layer Norm?
  20. Uploadify的用法

热门文章

  1. 支付宝支付的大致流程
  2. APP STORE经验分享
  3. 计费管理系统开发历程与源码分享(武汉理工大学程序设计综合实验课程设计)
  4. 第9类商标的计算机和计算机软件类似吗,手机APP属于什么商标类别 第9类精品商标分享...
  5. 在centos8环境下用asterisk18配置pjsip和webrtc音视频通话教程(二)
  6. C语言丨数组越界及其避免方法详解
  7. 【数学建模】8 非线性规划及例题讲解
  8. 微信那些词语发不出去
  9. 在Anaconda下安装Pytorch的超详细步骤
  10. 最少圆覆盖通信覆盖问题-算法分析设计-贪心算法-java实现