迭代,函数

Python基础学习笔记DAY5

1. 迭代(iterate)

(1)可直接遍历的类型:list, tuple, dictionary, file等

(2)可迭代的对象(实现迭代器协议的对象)支持遍历/循环

(3)迭代协议的目的:节省内存

(4)可实现迭代协议的对象:对象内部有next方法:

  • next()
    如:f. next()
  • 全局方法:next(f)

(5)file 有__next__()方法,而list没有。对于没有__next__()方法的数据类型,之所以还能使用for语句,是因为for实现了额外的步骤。即:可使用循环语句的数据类型有两种:(1)本身可调用__next__()方法,属于迭代器对象;(2)本身不可调用__next__()方法,属于可迭代对象,但调用for等语句时自动生成 iter(),用于生成迭代器,使其可调用__next__()方法(或next())函数。判断是迭代器对象还是可迭代对象的方法:

iter(f) is f
//输出True 则说明是迭代器对象

PS:为什么list不是迭代器对象:因为列表可嵌套列表,可能使结构复杂。
(6)字典表遍历时只能遍历取出键

d={'a':1,'b':2}
for k in d:
    print{k}
//如下写法错误:
d={'a':1,'b':2}
for k,v in d:
    print{k,v}

(7)迭代工具

  • for
  • 推导
  • map
  • 内置可迭代对象

(1)range() – 类型为range
(2)zip //负责将两个集合合成一个

result = zip (['x'],[1])
//类型为zip,print结果为元组,有next方法
  • map
def f(x):
    return x*x
print(list(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])))
//将每一个元素应用函数的执行

2. 函数(function)

(1)定义函数目的:最大化代码重复&最小化代码冗余&过程分解
定义方式:def 函数名():
定义时用形参,调用时用实参
从外往里传:调用
从里往外传:可返回一个值

(2)函数变量的作用域

  • built-in(作用域比global还要高)
  • global
//打印55
x=55
def func():
    x=99

    print(x)
//打印99
x=55
def func():
    global x
    x=99
    print(x)
  • enclosure – 封装(外层x成为封装,函数套函数时用到)
//nested没调用,所以只print一次,输出100
def func():
    x=100
    def nested():
        x=99
        print(x)
    print (x)
//输出两次100
def func():
    x=100
    def nested():
        x=99
        print(x)
    nested()
    print (x)

//若要用外层封装的x为内层的x
def nested():
    nonlocal x 
  • local
    形参的生命周期在函数体内(本地)

(3)定义新函数会覆盖原来的内置函数

(4)函数的参数

def change_num(x)
    x+=10
x=5
print('x={}'.format(x)) //5
change_number(x)
print('x={}'.format(x))  //5 

整型这一数据类型不能改变,由于这一特性,在函数调用x时x传的值为副本,即x一直不改变,函数的传递时,不可变类型(int float tuple str)传递副本给函数,函数内操作不影响原始值。可变类型(列表,字典表),传递地址引用,函数内操作可能会影响原始值

//使list不变的方法如下
change_list(l[:])
change_list(l.copy())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值