python(八)——迭代器,函数的参数使用方法(参数传递,关键字参数,默认参数,不定长参数,匿名函数)

目录

 

迭代器

函数

参数传递

关键字参数

默认参数

不定长参数

匿名函数


迭代器

可迭代对象:可以直接作用在for循环的对象都可以称为可迭代对象

(Iterable) : 可以使用isinstance()去判断一个对象是否为Iterable对象

可以直接作用在for循环的数据类型一般分2类:

  1. 集合数据类型:list、tuple、dict、set、string
  2. 生成器generator:包括生成器和带yield的generator function

判断迭代对象:

#导入包
from collections.abc import Iterable

print(isinstance([], Iterable))
print(isinstance((), Iterable))
print(isinstance("", Iterable))
print(isinstance({}, Iterable))
print(isinstance((x for x in range(10)), Iterable))
print(isinstance(3, Iterable))

 

迭代器:不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出一个StopIteration错误表示无法返回下一个值

判断迭代器:

#导入包
from collections.abc import Iterator

print(isinstance([], Iterator))
print(isinstance((), Iterator))
print(isinstance("", Iterator))
print(isinstance({}, Iterator))
print(isinstance((x for x in range(10)), Iterator))
print(isinstance(3, Iterator))

将迭代对象转换为迭代器:

a = [1,2,3,4,5]
b = iter(a)
print(next(b))

输入几行数据,直到输入end才能结束,将前面所有的输入都打印出来

#导入包
from collections.abc import Iterator

end = "end"
str = ""

for line in iter(input,end):
    str += line + "\n"

print(str)

 

函数

格式:

def 函数名(参数1,参数2.....参数n)

      语句

      return 表达式

def:函数代码块从def关键字开始

函数名遵循标识符规则

def myprint():
    a = "boy"
    print(a)

myprint()

def sum(a,b):
    print(a+b)

sum(2,5)

参数传递

值传递:传递不可变类型

string,tuple,number不可变

def sum(n):
    print(id(n))
    n = 10
    print(n)
    
n = 20
sum(n)
print(n)

 

引用传递:传递的可变类型

list,dict,set可变

def sum(n):
    n[0] = 10
    print(n)

n = [1,2,3,4]
sum(n)

 

关键字参数

允许函数调用时的顺序与定义时不一致

def sum(n,m):
    print(n,m)

sum(m=10,n=20)

 

默认参数

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

如果要使用默认参数,最后将默认参数放到最后

def sum(n='aaa',m='ccc'):
    print(n,m)

sum(m=10,n=20)

def sum(n='aaa',m='ccc'):
    print(n,m)

sum()

 

不定长参数

能处理比定义时更多的参数

加了*的变量能存放所有未命名的变量参数,如果没有指定参数,就是一个空元组

def sum(*arr):
    print(arr)

sum('aaa','bbb','ccc','ddd')

def sum(*arr):
    print(arr)

sum()

加了**的变量生成的是字典,**代表键值对的参数

def dict(**arr):
    print(arr)

dict(a=1,b=2,c=3)

 

匿名函数

当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数。

不能使用def定义函数,使用lambda来定义函数

 

特点:

1.lambda只是一个表达式,函数体比def简单

2.lambda主体只是一个表达式,而不是一个代码块,仅仅只能在lambda中封装简单的逻辑

3.lambda有自己的命名空间,且不能访问自由参数之外的参数或全局命名空间的参数

4.虽然lambda是一个表达式,且只能写一行,与C/C++中的内联函数不同。内联函数是为了占用更小的占空间而增加运行效率

 

格式:lambda 参数1,参数2,参数3....参数n:expression(表达式)

sum = lambda n,m,k : n+m-k
print(sum(3,4,5))  #3+4-5=2

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空城机

有钱捧个钱场,没钱捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值