IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python学习记录(六):函数、变量的作用域、参数传递、浅拷贝&深拷贝、labmda表达式、eval()、递归函数 -> 正文阅读

[Python知识库]python学习记录(六):函数、变量的作用域、参数传递、浅拷贝&深拷贝、labmda表达式、eval()、递归函数

1. 函数的定义和调用

def 函数名([参数列表])'''文档字符串'''
	函数体/若干语句
  • 要点
    1. 使用def定义函数;
    2. 参数列表
      • 圆括号内是形参列表,用逗号隔开;
      • 形参不需要声明类型,也不需要指定函数返回值类型;
      • 无参数时,圆括号必须保留;
      • 实参、形参列表需要一一对应;
    3. return返回值
      • 如果函数体中包含return语句,则结束函数执行并返回值;
      • 如果函数体中不包含return语句,则返回None;
      • 多个返回值,可以使用列表、元组、字典、集合将多个值存起来
    4. 调用前必须先定义;
      • 内置函数对象自动创建;
      • 标准库 or 第三方库需使用 import 导入;

2. 变量的作用域

2.1 全局变量

  • 在函数和类定义之外声明的变量;
  • 全局变量降低了函数的通用性和可读性,应尽量避免使用;
  • 全局变量一般做常量使用;
  • 函数内要改变全局变量的值,需使用global声明一下。

2.2 局部变量

  • 在函数体中(含形式参数)声明的变量;
  • 局部变量的引用快,优先考虑使用;
  • 如果局部变量和全局变量名称相同,则只使用同名的局部变量。

3. 参数的传递

python中参数的传递都是“引用传递”;

3.1 传递可变对象的引用

  • 可变对象:字典、列表、集合、自定义对象;
  • 直接作用于原对象本身;
  • 实际上传递的还是对象的引用,在函数体中不创建新的对象的拷贝,而是可以直接修改所传递的对象;

3.2 传递不可变对象的引用

  • 不可变对象:数字、字符串、元组、function等;
  • 会产生新的“对象空间”,并用新的值填充这块空间;
  • 实际传递的还是对象的引用,在“赋值操作”时,由于不可变对象无法修改,系统会创建一个新对象;

4. 浅拷贝 & 深拷贝

  • 浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用;
import copy
def testCopy():
	a = [10, 20,[5, 6]]
	b = copy.copy.(a)
	print('a:', a)
	print('b:', b)
	b.append(30)
	b[2].append(7)
	print("浅拷贝后--------")
	print('a:', a)
	print('b:', b)

# a:[10, 20,[5, 6]]
# b:[10, 20,[5, 6]]
# 浅拷贝后--------
# a:[10, 20,[5, 6, 7]]
# b:[10, 20,[5, 6, 7], 30]
  • 深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响原对象。
import copy
def testDeepCopy():
	a = [10, 20,[5, 6]]
	b = copy.copy.(a)
	print('a:', a)
	print('b:', b)
	b.append(30)
	b[2].append(7)
	print("深拷贝后--------")
	print('a:', a)
	print('b:', b)

# a:[10, 20,[5, 6]]
# b:[10, 20,[5, 6]]
# 深拷贝后--------
# a:[10, 20,[5, 6]]
# b:[10, 20,[5, 6, 7], 30]
  • 传递不可变对象是浅拷贝

5. 参数的几种类型

  • 位置参数:函数调用时,实参默认按位置顺序传递;
  • 默认值参数:可以为某些参数数默认值,默认值参数在位置参数后;
  • 命名参数:使用形参的名称传递参数,也称为“关键字参数”;
  • 可变参数:可变数量的参数;
    • ‘* param’,将多个参数收集到一个“元组”对象中;
    • ‘** param’,将多个参数收集到一个“字典”对象中;
  • 强制命名参数:带星号的可变参数后新增加的参数,必须是“强制命名参数”;

6. lambda 表达式和匿名函数

  • lambda表达式可以用来声明匿名函数;
  • lambda函数是一种简单的、在同一行中定义函数的方法,实际上生成了一个函数对象;
  • 只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值;
lambda arg1, arg2, arg3... : <表达式>
f = lambda a, b, c : a + b + c
print(f(2, 3, 4))
# 9

g = [lambda a : a*2, lambda b : b*3, lambda c : c*4]
print(g[0](6), g[1](7), g[2](8))
# 12 21 32

7. eval()

  • 将字符串str当成有效的表达式来求值并返回计算结果;
eval(source[,globals[,locals]])->value
  • source:一个python表达式或者函数compile()返回的代码对象;
  • globals:可选,必须是dictionary;
  • locals:可选,任意映射对象;

8. 递归函数

  • 终止条件:确定递归何时结束,一般用于返回值;
  • 递归步骤:把第n步的值和第n-1步相关联;
  • 递归函数会创建大量的函数对象,耗内存和运算能力,大量数据时不推荐使用;
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:00:05  更:2022-06-29 19:00:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/19 13:00:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码