Python学习笔记(四)

一、迭代器

1. 可迭代对象与迭代器对象

(1)什么是可迭代对象

在Python中,把可以通过for…in…这类语句迭代,读取一条数据供我们使用的对象称之为可迭代对象(Iterable)。列表、元组、字符串、字典都是可迭代对象。

(2)可迭代对象与迭代器对象

迭代器对象可以调用next方法,可迭代对象需要先转换为迭代器对象才能调用next方法

(3)判断是否为可迭代对象
isinstance(对象名,Iterable)


(4)判断是否为迭代器对象
iter(对象名) is 对象名

from collections.abc import Iterable
l = [1, 2, 3]
print(isinstance(l, Iterable))	# True
print(iter(l) is l)   # False

2. 迭代器协议

对象需要实现__next__()方法和__iter__()方法

3. 迭代器函数

  • 对象方法
    对象名.__next__()
    对象名.__iter__()
  • 全局方法
    next()
    iter() 该函数返回迭代器对象

4. 创建迭代器

需要实现类的__iter__()方法和__next__()方法

class MyNumbers:
    def __iter__(self):
        self.a = 1
        return self

    def __next__(self):
        x = self.a
        self.a += 1
        return x

二、函数

1. 函数的作用

  1. 提高代码的重复利用率,避免重复开发相同代码
  2. 提高程序的开发效率
  3. 便于程序维护

2. 函数的类型

(1)无参数无返回值

def 函数名():
	函数内容

(2)无参数有返回值

def 函数名():
	函数内容
	return 返回内容

(3)有参数无返回值

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

(4)有参数有返回值

def 函数名(参数1, 参数2, ...):
	函数内容
	return 返回内容

(5)带有默认值的函数

def 函数名(参数1 = , 参数2 = , ...):
	函数内容

3. 变量的作用域

变量的作用域就是指变量的有效范围。

(1)变量分类
全局变量:在所有函数外部声明的变量就是全局变量
局部变量:仅在函数内部可以使用的变量称之为局部变量

(2)global 关键字
global的作用就是把局部变量提升为全局变量

a = 1

def fun():
	global a
	a = 2

fun()
print(a)

(3)nonlocal 关键字

nolocal关键字可以使用外部函数的变量

def fun1():
    a = 10
    def fun2():
        nolocal a = 20  # 这时外部函数的变量a发生改变
        print(a)
    print(a)

4. 参数匹配

  1. 位置参数
    就是按照形参的顺序,依次进行匹配
  2. 关键字匹配
def fun(a, b):
    print(a + b)
    
fun(a=1, b=2)
  1. 默认参数
def fun(a = 1, b = 2): # 注意:如果有默认值参数,需要放到参数列表的最后
    print(a + b)

fun(1)
  1. *args(元组)
def fun(*args):
    print(sum(args))

fun(1, 2, 3, 4, 5....)

注意:(1)对于参数中只有一个*args的情况,如果没有传参数会抛出异常

def fun(*args):
	pass

fun()  # 错误

         (2)传值时不能直接传元组

l = (1, 2, 3, 4)
fun(l)  # 错误
fun(*l) # 正确
  1. **kwargs(字典)
def fun(**kwargs):
    print(kwargs)

fun(a = 10, b = 20.....)

注意: 不能直接传入字典,如果需要传入,需要进行解包

d = {"name":"Tom", "age":18}
def fun(**kwargs):
	print(kwargs)

fun(d)  # 错误
fun(**d) # 正确

5. lambda 表达式

特点: 省略函数名
格式:f = lambda 参数列表:函数内容

f = lambda a, b : print(a + b)
f(2, 3)

6. 函数高级工具

(1)map

通过自定义的函数,对序列中每个元素,做一个数学上的代换,返回迭代器

map(fun,sequence)

a = [1,2,3,4,5,6,7,8,9]
b = [2,3,4,5,6,7,8,9,0]
def fun(a):
    return a+1
# 方法一
res = map(lambda x,y:x+y,a,b)
print(res)  # 这是一个迭代器对象
print(list(res))  # 这个才是结果
# 方法二
res1 = map(fun,a)
print(res1)
print(list(res1))

(2)filter

通过自定义的函数,对序列中每组元素做过滤,返回过滤后的迭代器
filter(fun,sequence)

a = [1,2,3,4,5,6,7,8,9]
def fun(a):
    return a % 2 ==0
res = filter(lambda x:x>5,a)
print(res)
print(list(res))
res1 = filter(fun,a)
print(res1)
print(list(res1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值