Python基础(五)------迭代、函数定义与参数

目录

1 迭代

1.1 迭代协议 next()

能够获取到下一个元素,用于移动指针关联到下一个元素上

>>> f = open('hello.txt',encoding = 'utf8')
 
>>> f.__next__()
'baidu www.baidu.com\n'
>>> next(f)
'google www.google.com\n'
>>> f.__next__()
'taobao www.taobao.com'
>>> next(f)
Traceback (most recent call last): #迭代结束了
  File "<stdin>", line 1, in <module>
StopIteration

1.2 迭代工具 for…推导…map…

for…推导…map…之所以能够遍历对象,是因为程序在目标上应用了迭代器

1.迭代器对象
已经原先就应用了迭代器

2.可迭代对象
iter() - > iter() 用于生成迭代器

注意:因为 list本身内部比较复杂,Python并没有预先为list实现好迭代器,因此需要手动创建迭代器。

>>> f = open('hello.txt',encoding = 'utf8')
>>> iter(f) is f     #f是否是迭代器对象
True                 #文件类型已经应用了迭代器,是迭代器对象
 
>>> url = [1,2,3]
>>> iter(url) is url
False                #列表类型没有原先就应用了迭代器,但他是可迭代对象
 
 
>>> l = iter(url)    #列表是可迭代对象,可应用一个迭代器
>>> l.__next__()
1
>>> l.__next__()
2

1.3 内置可迭代对象

内置可迭代对象有:range(),map(),zip()…
例子:
map()方法

def double_number(x):
    return  x**2
 
l = [1,2,3,4,5]
result = list(map(double_number,l)) #对l中每个元素应用double_number()方法
print(result)
[1, 4, 9, 16, 25]

zip()

l1 = [1,2,3,4,5]
l2 = [6,7,8,9,0]
result = list(zip(l1,l2)) #把两个列表的元素按位置一一对应组成元组
print(result)
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 0)]

2 函数

2.1 函数的作用

最大化代码重用
最小化代码冗余
过程分解

2.2 函数的定义

def 方法名 (参数1,参数2...)

2.3 函数的调用

函数名(实际参数)

2.4 变量的作用域

Build-in 内置变量
Global和Local变量
x = 55            #在函数外部定义全局变量x
 
def func():     
    global y = 3  #在函数内部定义全局变量y
    x = 99        #局部变量
    return x
 
print("全局x = ",x) 
print("func函数内x = ",func()) 
print("全局y = ",y) 
全局x =  55
func函数内x =  99
全局y =  33

Enclousure封装

def func():
    x = 99       #enclousore封装
    def nested():
        x = 100
        print(x)
    nested()
    return x
 

nonlocal 声明非局部变量

def func():
    x = 99
    def nested():
        nonlocal x
        x = 100
        print(x)
    nested()
    print(x)
 
func()
100
100

2.5 参数

1.参数传递
通俗来讲,传递的意思就是把数据传递到函数内部,让其对数据进行操作

不可变类型,传递副本给函数,函数内对象不影响原始值,例如int型、字符串str
可变类型,传递地址引用,函数内操作可能会影响原始值,例如列表list
def change_number(x):
    x+=1
 
def change_list(list):
    list[0] = 'change'
 
def change_str(str):
    str = 'change'
x =1
list = [6,6,6]
str = '666'
change_number(x)
change_list(list)
change_str(str)
print(x)
print(list)
print(str)
1
['change', 6, 6]
666

2.参数匹配

位置匹配
关键字匹配
def func(a,b,c):
    print(a,b,c)
 
func(1,2,3)             #位置匹配
func(c = 1,b = 2,a = 3) #关键字匹配
1 2 3
3 2 1
默认值(调用时省略传值)
def func(a,b = 1,c = 3):
    print(a,b,c)
 
func(a = 1)     #b和c都默认匹配
func(1,2,c = 1) #传入其他值时不按默认
1 1 3
1 2 1
*args 任意数量参数
def avg(*scores):     #可以传入任意数量的参数
    return  sum(scores) / len(scores)
 
result = avg(1,2,3,4,5)
print(result)
2.5

如果要传入元组tulple内的多个数据,应该用 * 进行解包

def avg(*scores):     #可以传入任意数量的参数
    return  sum(scores) / len(scores)
 
scores = (1,2,3,4)
result = avg(*scores)
print(result)
2.5

e.**kwargs

d = {'name':'Tom','age':23,'job':'worker'}
d2 = dict(name='Tom',age=23,job='worker')
 
def display(**person):
    print(person)
 
display(name='Tom',age=23,job='worker') #可以通过传入键值对的方式
display(**d)                            #可以通过解包字典的方式
{'name': 'Tom', 'age': 23, 'job': 'worker'}
{'name': 'Tom', 'age': 23, 'job': 'worker'}

需要注意的是不论是dict方法还是自定义方法,传入键值对的时候键值对中的键不能加引号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。 首先,让我们来谈谈 Python 中的异常处理。在 Python 中,异常是程序在运行时遇到的错误或问题,它会导致程序停止运行并抛出一个异常。为了避免这种情况,我们可以使用 try/except 块来捕获并处理异常。例如: ``` try: # some code that might raise an exception except SomeException: # handle the exception ``` 其中,SomeException 是你想要捕获的异常类型。当代码运行到 try 块中的代码时,如果出现了 SomeException 异常,那么 except 块中的代码就会被执行。 接下来,让我们来谈谈 Python 中的对象。在 Python 中,一切都是对象,包括数字、字符串、函数等等。对象有一个类型,它定义了对象可以执行的操作。例如,数字类型可以执行加、减、乘等操作,字符串类型可以执行拼接、切片等操作。你也可以创建自己的对象,并定义它们的类型和操作。 最后,让我们来谈谈 Python 中的迭代器。迭代器是一种对象,它可以让你逐个访问一个序列中的元素。Python 中的迭代器是通过 __iter__ 和 __next__ 方法实现的。__iter__ 方法返回一个迭代器对象,__next__ 方法返回序列中的下一个元素。例如: ``` class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.data): raise StopIteration result = self.data[self.index] self.index += 1 return result my_iter = MyIterator([1, 2, 3]) for item in my_iter: print(item) ``` 在上面的例子中,我们创建了一个名为 MyIterator 的迭代器对象。它有一个 data 属性,表示要迭代的序列,以及一个 index 属性,表示当前迭代的位置。__iter__ 方法返回 self,表示它本身就是一个迭代器对象。__next__ 方法返回序列中的下一个元素,并将 index 属性加 1。当迭代器遍历到序列末尾时,会抛出 StopIteration 异常,表示迭代结束。 希望这些信息能够对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值