一、函数

1、参数

def func(形参, *args, 关键字参, **kwargs)    pass

2、作用域

global:声明一个变量是全局变量。

nonlocal:声明一个变量是局部变量,用在函数嵌套中,内层函数用来声明一个变量是局部中离它最近的同名局部变量。如果声明的这个变量在局部中没有则报错,或者声明的这个变量在局部已经被声明为全局变量也报错。

3、命名空间

命名空间就是变量名和值的对应关系,分为内置、全局和局部,变量会分别保存在这三个地方。

函数里的变量只有在函数被执行时才会开辟命名空间,当函数执行完毕后又被清除,外部无法调用。

4、闭包

定义:在内层函数使用外层函数的变量

作用:1、保护变量不被全局中其他的函数改变。如果直接一层函数,并且使用全局变量,那这个变量很可能被其他函数修改,导致需要的变量值不对。2、常驻内存,使得局部的变量不被清除,为装饰器做铺垫。

def func1():a = 111def func2():return areturn func2func = func1()
f = func()
print(f)

举个例子

5、匿名函数

匿名函数一般搭配内置函数一起使用。

lambda x:x+1 

6、内置函数

(1) sorted

sorted用来给可迭代对象排序,有三个参数:iterable可迭代对象、key排序规则、reverse是否倒序。

sorted是创建列表将排序好的数据都放到新的列表,原数据并不改变,而列表的.sort()方法是修改原列表。

sorted不管传入的是什么数据类型,返回的都是列表,如果传入的是一个字符串,会将每个字符排序放入列表,如果传入的是一个字典,会将字典的键排序。

l = ["aaaaa", "aaa", "a", "aaas"]
print(sorted(l, key=lambda x:x.count("a"), reverse=False))  # 将列表按照含a的个数从小到大排序

d = [{"name": "小黑", "age": 3}, {"name": "小红", "age": 2}, {"name": "小明", "age": 1}]
print(sorted(d, key=lambda x:x["age"]))

(2) filter

filter用来对可迭代对象做过滤,有两个参数:function 规则、iterable 可迭代对象。

按照规则如果返回真则保留,返回假就不要。最后返回的是一个迭代器,需要用list()转换成列表。

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(filter(lambda x: x % 2 == 0, l)))  # 得到一个只有偶数的列表

(3) map

map对每个数据做一些操作,需要两个参数:func 规则、iterable可迭代对象。

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(map(lambda x: x + 1, l)))  #得到一个每个数都加1的列表

(4) zip

zip把传入的一个或多个可迭代对象中,索引值相同的元素打包成一个元祖,最后返回一个迭代器。

l1 = [1, 2, 3]
l2 = [3, 2, 1]
print(list(zip(l1, l2)))
>>>[(1, 3), (2, 2), (3, 1)]

(5) isinstance 和 issubclass

isinstance(obj, cls) 判断对象是否属于某个类型,包含继承关系。

issubclass(son, father) 判断一个类是否是一个类的子类。

二、装饰器

装饰器就是在不改变函数代码的前提下给函数添加新的功能。

1、装饰器的基本格式

def wrapper(func):def inner(*args,**kwargs):print("111")ret = func(*args,**kwargs)print("222")return retreturn inner@wrapper
def test():a = 1return a

2、装饰器的wraps

实际上@wrapper就是执行了test = wrapper(test),使得我们调用的test函数变成了wrapper函数,导致函数的信息也变成了wrapper的,比如函数的名字,给装饰器内层的函数添加一个@wraper可以让函数的信息维持原来的样子。

from functools import wraperdef wrapper(func):@wraperdef inner(*args,**kwargs):print("111")ret = func(*args,**kwargs)print("222")return retreturn inner@wrapper
def test():a = 1return a

3、带参数的装饰器

def outer(a):def wrapper(func):def inner(*args,**kwargs):xxxxxreturn return innerreturn wrapper@outer(xx)

4、多个装饰器装饰一个函数

@wrapper1

@wrapper2

def xxxxx

这样会先执行1里func前的代码,再执行2中func前的代码,再执行func,再执行2中func后的代码,在执行1func后的代码。

三、迭代器

迭代器可以让不同的数据类型有相同的遍历方式。

只要含有__iter__方法的都是可迭代对象——可迭代协议

只要含有__next__和__iter__方法就是迭代器——迭代器协议

for循环就是在使用迭代器,举例:

for i in li:

当使用for循环时,就是在执行iterator = l.__iter__(),拿到的i就是通过iterator.__next__()获取到的。

四、生成器

定义:只要有yield关键字的函数,就是生成器函数。

生成器本质是迭代器,是迭代器的一种。

生成器函数在调用时不执行内部语句,只有在.__next__方法时,才执行到第一个yield为止,在下一次执行__next__方法时,执行到第二个yield。

注意,生成器里的值只能取一次。

特点:1、省内存,存的是代码,不是数据。2、惰性机制。3、只能向前,不能反复。

def func():yield 1yield 2yield 3yield 4>>> temp = func()
>>> temp.__next__()
1
>>> temp.__next__()
2
>>> temp.__next__()
3
>>> temp.__next__()
4
>>> temp.__next__()
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration

生成器示例

一、创建生成器的两种方式:

def func():print(111)yield "111"print(func().__next__)

1、生成器函数

g = (i for i in range(10))

2、生成器表达式

二、next和send

# 生成器可以通过__next__方法取值
def func():yield 1yield 2yield 3g = func()
print(g.__next__())
print(g.__next__())
print(g.__next__())

next

# 生成器还可以通过send取值,并且send可以给上一个yield赋值
# 因为send是给上一个yield赋值,所以第一次只能用__next__
def func():print("开始")a = yiled "1"print("a:",a)b = yiled "2"print("b:",b)c = yiled "3"print("c:",c)yiled "结束"g = func()
print(g.__next__())  # 开始  1
pritn(g.send("这是a"))  # a:这是a  2
pritn(g.send("这是b"))  # b:这是b  3
pritn(g.send("这是c"))  # c:这是c  结束

send

三、惰性机制

生成器的惰性机制让生成器只有在取值的时候才会执行,否则生成器中保存的只是代码,没有数据。

def add(a,b):return a + bdef gen():for i in range(4):yield ig = gen()for n in [2, 10]:g = add(n,i) for i in g    # 这里生成器g并没有取值,所以并不执行这段代码,只是把这段代码完整的代入下一次循环,n没有机会等于2,只会等于10print(list(g))
# 这里g被取值了,实际上现在等于执行的是 [add(n, i) for i in (add(n,i) for i in g)],这时的n都是10

四、各种推导式

[i for i in range(10)]  # 列表推导式
{i:i+1 for i in range(10)}  # 字典推导式
{i for i in range(10)}  # 集合推导式

用生成器自定义一个range函数:

def nrange(num):n = 0while n < num:yield nn += 1returnfor i in nrange(10):print(i)#得到 0,1,2,3,4,5,6,7,8,9

View Code

转载于:https://www.cnblogs.com/yinwenjie/p/10847450.html

Python基础 2相关推荐

  1. f是一个python内部变量类型,Python基础变量类型——List浅析

    Python使用list 一.list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示 ...

  2. python 等号报错_Python学习----Python基础

    Python基础 一.数据类型和变量 1.在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量. 例如: a =520# a是整数prin ...

  3. python基础——继承与派生、组合

    python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...

  4. Python学习笔记1 Python基础

    第1章 Python基础 1.1 Python概述及版本介绍 1.Python是一种面向对象的解释型计算机程序设计语言(解释型语言源代码->解释器逐行解释每一句源代码) 2.优点:高级语言.可移 ...

  5. python基础---元组、字典、函数、文件、异常

    文章目录 python基础---元组.字典.函数.文件.异常 Tuple(元组) 常用操作 dict(字典) 函数 文件 异常 python基础-元组.字典.函数.文件.异常 Tuple(元组) tu ...

  6. 快速掌握Python的捷径-Python基础前传(1)

    文: jacky(朱元禄) 开文序 最近看新闻,发现高考都考Python了,随着人工智能的火热,学数据科学的人越来越多了!但对于数据行业本身来说,现象级的火热,这并不是什么好事.  方丈高楼平地起,无 ...

  7. Python培训教程之Python基础知识点梳理

    Python语言是入门IT行业比较快速且简单的一门编程语言,学习Python语言不仅有着非常大的发展空间,还可以有一个非常好的工作,下面小编就来给大家分享一篇Python培训教程之Python基础知识 ...

  8. python基础04

    python基础04 python2在编译安装时,可以通过参数 -----enable----unicode=ucs2 或 -----enable--unicode=ucs4 分别用于指定使用2个字节 ...

  9. 刻意练习:Python基础 -- Task12. 模块

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  10. 刻意练习:Python基础 -- Task11. 魔法方法

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

最新文章

  1. 多国相继出台政策法规:为「自动驾驶」的「创新发展」保驾护航
  2. 游戏开发随想之2D游戏架构
  3. java的应用程序开发_开发一个Java应用程序(1)
  4. Qt学习笔记-自绘时钟
  5. mysql 双机异地热备份—-mysql主从,主主备份原理及实践
  6. Solaris 图形化界面登陆的控制
  7. android 跨进程 android:process,Android跨进程通信技术-多进程模式的运行机制
  8. 201671010140. 2016-2017-2 《Java程序设计》java学习第十六周
  9. 微信读书vscode插件_众所周知,拥有了vscode就拥有了一切
  10. VOSviewer | (一)从零安装教程
  11. C# 短视频 无水印解析 原视频下载(超详细)
  12. 2021年值得推荐的几个可视化软件
  13. c++有关iostream和iostream.h
  14. vpay商城系统开发app
  15. 计算机网络技能大赛感受,技能大赛心得体会
  16. 英语口语收集(二十五)
  17. Unbuntu16.04下cmake-gui安装
  18. MyBatis自带的缓存配置(Cache)
  19. Day10安卓 专高 day10 ContentProvider内容提供者
  20. 自制密码生成器1.0

热门文章

  1. linux系统支持游戏,3种方法让Linux系统支持游戏
  2. mysql中index的作用,在mysql中使用INDEXES有什么好处?
  3. pointcloud 转ptr_ROS学习笔记(三)sensor_msgs::LaserScan转pcl::PointCloud
  4. python动态创建类_Python中通过参数动态创建扩展类(class)
  5. matlab for循环_从零开始的matlab学习笔记——(5)循环
  6. axi dma cyclic mode调试完成
  7. ADRV902X 启动流程 和 校准 注意事项
  8. Linux嵌入式驱动管理调试平台 ------ 我的第一个开源项目
  9. java怎样读txt文件_【后端开辟】java怎样读写txt文件?
  10. java 数据库 空值_java – 是否可以将枚举属性的空值存储到数据库?