Python基础知识笔记(二)

  • 一.函数
  • 二.全局变量和局部变量
  • 三.嵌套函数
  • 四.闭包
  • 五.装饰器
  • 六.匿名函数
  • 七.递归函数

一.函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。函数包括内置函数和用户自定义函数。

1.函数定义

(1)函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。

(2)任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

(3)函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

(4)函数内容以冒号 : 起始,并且缩进。

(5)return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return
相当于返回 None。

格式:

def 函数名([形参数1,形参数2,...]):函数体return [表达式]

调用:

函数名([实参1,实参2,…])

2.可变参数

(1)函数的参数个数不定,加了星号 *
的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

注意:有固定参数时,可变参数必须放在固定参数后。

定义方式1:

def 函数名(*args): # 以元组(tuple)的形式导入

函数体

如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。

(2)加了两个星号 ** 的参数会以字典的形式导入。

定义方式2:

def 函数名(**kwargs)

函数体

如果给函数形参赋值的时候传递的是一个字典:传递实参:**变量名(字典名),这里首先将传递的字典参数进行拆包,拆成一个个键值对(key=value)->函数名(key1=value1,
key2=value2,…)

步骤:

(1)将字典进行拆包

(2)函数里面的参数都是关键字参数

(3)将关键字参数进行装包

(4)装包成功:kwargs就是装包成功的字典

3.默认参数:key=value

调用函数时,如果没有传递参数,则会使用默认参数。

def 函数名(a, b=value):

函数体

调用:

函数名(a = 10, b = 10) # 关键字参数

4.返回值

return [表达式]
语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。

(1)return后面可以是一个参数

(2)return后面可以是多个参数,如果是多个参数则底层会将多个参数先放在一个元组中,将元组作为整体返回

(3)接收返回值的时候也可以是多个,例如:return ‘hello’,‘world’ x, y =
(‘hello’,‘world’) -->x = ‘hello’ y = ‘world’

5.函数的嵌套调用

二.全局变量和局部变量

1.局部变量:声明在函数内部的变量,仅限于在声明该变量的函数中使用

2.全局变量:声明在函数外部的变量,所有函数都可以访问,不可在函数内部修改全局变量

如何在函数中修改全局变量?

在函数内部声明:global 变量名

3.全局变量如果是不可变的,在函数中修改需要加关键字global关键字,如果全局变量是可变的,在函数中修改则不需要加global关键字

三.嵌套函数

1.内部函数–在函数内部声明的函数

(1)定义

def func():...def inner_func(): # 内部函数...

(2)调用

def func():...def inner_func(): # 定义...inner_func() # 调用

(3)特点:

a.可以访问外部函数的变量

b.内部函数可以修改外部函数的可变类型的变量

c.如果要在内部函数中修改外部函数的不可变类型的变量,则需要在内部函数中使用关键字nonlocal声明变量

d.内部函数修改全局的不可变变量时,需要在内部函数声明global 变量名

(4)locals()内置函数–查看当前函数中声明的内容,以字典形式输出

(5)globals()内置函数–查看全局变量有哪些,以字典形式输出(会包含一些系统的键值对)

四.闭包

1.概念(条件)

在函数中提出的概念,在外部函数中定义内部函数时,外部函数是有返回值的,返回的值是内部函数名(不能加括号),内部函数引用了外部函数的变量

2.格式

def 外部函数():内容def 内部函数():内容return 内部函数# 调用外部函数func = 外部函数()# 调用反出来的内部函数func()

3.闭包的应用

(1)闭包保存参数的状态(外层函数变量的状态)

例如:

def func(a, b):c = 10def inner_func():s = a + b + cprint('相加结果为:', s)return inner_func
func1 = func(6, 9) # a=6,b=9-->inner_func()内部函数中-->返回内部函数(此时返回的内部函数已经记录此时的a和b的值,所以不会受到外界a,b值改变的影响)
func2 = func(2, 8) # a=2,b=8-->保存在本次的inner_func内部函数中-->返回的时候返回的是保存2,8的内部函数
func2()
func1()

输出结果:

相加结果为:20

相加结果为:25

4.闭包缺点

(1)作用域不太直观

(2)变量不会被回收,所以存在内存占用问题

5.闭包作用

(1)可以使用同级作用域

(2)读取其他元素的内部变量

(3)延长作用域

6.闭包总结

(1)闭包优化了变量,原来需要类对象完成的工作,可用闭包完成

(2)由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存

(3)闭包使得代码变得简洁易读

(4)闭包是理解装饰器的基础

五.装饰器

1.特点

(1)函数A是作为参数出现,函数B接收函数A作为参数

(2)要有闭包的特点

2.定义例子

def decorate(func):a = 100def wrapper():print('------>11111')func()print('------>22222', a)return wrapper
# 使用装饰器
@decorate  #该标识以下的函数为被装饰函数,被装饰函数作为参数传给装饰器decorate,然后执行装饰器decorate
def house():print('-------')
house()

3.多层装饰器

(1)如果装饰器是多层的,哪个装饰器离函数距离最近就优先使用哪个装饰器

(2)装饰器带参数(三层)

def outer(a):   # 第一层:负责接收装饰器的参数def decorate(func):  # 第二层:负责接收函数def wrapper(*args, **kwargs):  # 第三层:负责接收函数的参数...return wrapperreturn decorate@outer(10)
def house():  # 被装饰函数...

4.装饰器的应用–登录验证

import timeisLogin = False  # 默认未登录状态
# 定义一个登录函数
def login():username = input('请输入用户名:')password = input('请输入密码:')if username == 'admin' and password == '123456':return Trueelse:return False# 定义一个装饰器,进行付款验证
def login_required(func):def wrapper(*args, **kwargs):global isLoginprint('--------付款---------')# 验证用户是否登录if isLogin:func(*args, **kwargs)else:print('用户未登录!')# 跳转到登录页面isLogin = login()print('result:', isLogin)return wrapper@login_required
def pay(money):print('正在付款,付款金额{}元'.format(money))print('付款中...')time.sleep(2)print('付款成功')pay(100)
pay(1000)

六.匿名函数

作用:简化函数定义
1.格式
lambda 参数1, 参数2, … : 运算(返回结果)

2.匿名函数作为参数
def func(x, y, func1):

func(1, 2, lambda a, b:a+b)

3.匿名函数与内置函数结合使用
例如:
(1)max()函数

 # 找出列表中的最大值
list1 = [10, 25, 23, 20]
m = max(list1)
print(m)
list2 = [{'a': 10, 'b': 20}, {'a': 25, 'b': 20}, {'a': 9, 'b': 20}, {'a': 29, 'b': 20}]
m = max(list2, key=lambda x: x['a'])
print(m)

(2)reduce()函数–对列表中的元素进行加减乘除运算

# 对元组中的元素进行加法操作(减、乘、除类似)
from functools import reducetuple1 = (3, 5, 7, 9, 6, 5, 2)
result = reduce(lambda x, y: x + y, tuple1)  # 结果为37
result1= reduce(lambda x, y: x + y, tuple1, 10)  # 结果为47
print(result)
print(result1)

(3)filter()筛选函数

 # 筛选出列表中大于10的元素
list1 = [6, 12, 65, 2, 89, 54, 9]
result = filter(lambda x: x > 10, list1)
print(list(result))

(4)map()函数–对列表中的每一个元素进行操作

七.递归函数

函数自己调用自己
1.特点
(1)递归函数必须设置终点,否则会无线循环报递归错误(RecursError)
(2)通常有一个入口
2.实例

 # 求和1+2+...+100
def sum(n):if n == 0:return 0else:return n + sum(n - 1)
result = sum(100)
print(result)

Python基础知识笔记(二)相关推荐

  1. 一、 Python 基础知识笔记 —— 《Python编程:从入门到实践(第二版)》学习笔记

    前言 先安利这本书<Python编程:从入门到实践(第二版)>,作者埃里克-马瑟斯,很适合新手入门,我的python入门学习就是以这本书为核心: 再安利一个网站:菜鸟教程-Python3教 ...

  2. Python基础知识笔记

    文章目录 Python基础知识 教程:https://www.liaoxuefeng.com/wiki/1016959663602400 内置函数:https://docs.python.org/3/ ...

  3. TensorFlow实战之Python基础知识笔记

    Python基础知识目录 一.初始Python 1. 解释和编译 2. Python语言特点 3. Python基础语法 二.基础知识 1. 数据类型 2. 常量.变量 3. 运算符 4. 条件语句 ...

  4. Python基础知识笔记——补充

    其实之前已经学过很多python基础了,甚至学了好多遍了,但最近报名了一个线上班,有空会看看一些视频,因此在本文补充一些以前漏学或者老师讲得不错的知识. 目录 Hash模块 简介 Base64 zli ...

  5. python基础知识笔记简书_Python基础学习笔记

    Python貌似有点火热,上手还是比较简单的,自己找了个教程也偷偷的学习一下,扒了一下网上的图片和数据,感觉并不是很难呀(不过之前换电脑,代码丢了,有点可惜,不过网上教程一抓一大把,随便看看也能扒一些 ...

  6. Python 基础知识(二)

    一.基础数据类型 1.数字int 数字主要是用于计算用的,使用方法并不是很多,就记住一种就可以: #bit_length() 当十进制用二进制表示时,最少使用的位数 # -*- coding:UTF- ...

  7. Python基础知识笔记(文章内容持续更新)

    python程序实例解析 2.1温度转换 2.2Python程序语法元素分析 2.2.3命名字与保留字 2.2.4字符串 2.2.5赋值语句 2.2.6 input函数 输入函数 2.2.7分支语句 ...

  8. Python基础知识笔记(三)——字典、集合

    字典         字典是"键值对"的无序可变序列,字典中的每个元素都是一个"键值对",包含:"键对象"和"值对象". ...

  9. Python基础知识(二)基本数据结构list列表和dict字典

    介绍 list和dict,顾名思义,就是列表和字典,这是python中非常基础的数据结构,也是非常重要且用途最广的数据结构 列表list就是一串糖葫芦 list是python的一种内置数据结构,想象成 ...

  10. Python基础知识笔记(一)——数值类型

    赋值 1.链式赋值:x=y=1 -----相当于x=1;y=1 2.系列数据赋值:a,b,c,d=1,2,3,4 ----相当于a=1;b=2;c=3;d=4 利用系列解包实现变量互换 >> ...

最新文章

  1. 智能待办,让老师真正的快乐
  2. 搞对象的时候走神儿了
  3. 依次提取二进制1位置的数字,
  4. java编译后的扩展名,Java的源代码扩展名和编译完后是扩展名正确的是
  5. MyBatis框架——mybatis插入数据返回主键(mysql、oracle)
  6. PHP操作redis
  7. HDU3388(二分+容斥原理)
  8. .NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证
  9. Ubuntu14.04 Apollo 3.5安装
  10. Memcached安装与使用实例
  11. 转: Oracle AWR 报告 每天自动生成并发送邮箱
  12. 二次解析视屏 php,最新PHP二次视频解析源码 带后台版
  13. vs 2010 sp1
  14. 日常生活开支记账明细_你的理财小管家!简单明了!皮面理财记账本明细流水支出笔记本!...
  15. 修订的GRE分类词汇(截屏版)
  16. java/php/net/python奖助学金评审管理系统设计
  17. 怎么把柱形图和折线图放在一起_excel怎么把柱状图和折线图合并
  18. java即时通讯_java实现即时通信的完整步骤分享
  19. 《国史通鉴》- 宋朝
  20. 播放器地址抓取 php,从优酷土豆视频地址中获取swf播放器分享地址 - PHP示例代码...

热门文章

  1. PHP 判断常量,变量和函数是否存在
  2. Android-StepsView
  3. 单例设计模式(懒汉式,饿汉式)
  4. 寻找自己的道路——与技术同胞共勉 一种划分为七个阶段的道路:自信=意志=布局=切入点=团队=渠道=产品...
  5. 13.PHP核心技术与最佳实践 --- Hash 算法与数据库实现
  6. 9.Tideways和xhgui
  7. 20.MySQL 常用命令
  8. c语言实现linux下的top命令来获取cpu利用率_Linux性能调优之CPU性能优化
  9. listView多布局
  10. 【安卓9】数据库升级