赞
踩
result = 为真时的结果 if 条件判断 else 为假的结果
a = 1
b = 2
# 普通方式
if a > b:
result = a
else:
result = b
print(result)
#三元表达式
result = a if a > b else b
print(result)
# 在元组中的用法
a, b = 1, 2
print(("tom", "lucy")[a < b])
# 在字典中的用法
a, b = 1, 2
print({True: "tom", False: "lucy"}[a < b])
# 三元运算符嵌套
a, b = 2, 3
print("a=b" if a == b else "a>b" if a > b else "a<b")
# 不是迭代过程
while True:
print("hello")
# 是迭代过程
list1 = [1, 2, 3]
n = 0
while n < len(list1):
print(list1[n])
n += 1
__iter__
方法的对象都是可迭代对象int1 = 1 int1.__iter__() # 报错 float1 = 1.1 float1.__iter__() # 报错 bool1 = True bool1.__iter__() # 报错 str1 = "tom" str1.__iter__() # <str_iterator object> list1 = list("tom") list1.__iter__() # <list_iterator object> set1 = set("tom") set1.__iter__() # <set_iterator object> tuple1 = tuple("tom") tuple1.__iter__() # <tuple_iterator object> dict1 = {"tom": "18"} dict1.__iter__() # <dict_iterator object>
obj.__iter__()
方法,返回的结果就是一个可迭代对象(iterator)迭代器对象.iter()
方法得到的仍然是迭代器本身迭代器.next()
方法就会计算出迭代器中的下一个值str1 = "tom"
# __iter__()
str1_iter = str1.__iter__()
# iter()
str1_iter = iter(str1)
str1 = "tom"
str1_iter = iter(str1)
# __next__()
value = str1.__next__()
print(value) # t
# next()
value = next(str1)
print(value) # o
# 字符串 str1 = 'tom' str1_iter = iter(str1) # <str_iterator object at> value = next(str1_iter) # t # 列表 list1 = list('tom') list1_iter = iter(list1) # <list_iterator object at> value = next(list1_iter) # t # 元组 tuple1 = tuple('tom') tuple1_iter = iter(tuple1) # <tuple_iterator object at> value = next(tuple1_iter) # t # 集合 set1 = set('tom') set1_iter = iter(set1) # <set_iterator object at> value = next(set1_iter) # t # 字典 dict1 = {'tom': "20"} dict1_iter = iter(dict1) # <dict_iterator object at> value = next(dict1_iter) # tom
优点:惰性计算、支持无限序列、内存效率高、可迭代对象的抽象
缺点:只能单向前进、不支持索引、代码相对复杂、不易于复制
# 快速生成列表 number_list = [i for i in range(3)] print(number_list) # [0, 1, 2] # 查看两个字符串的不同 a = "hello python" b = "pycharm" difference = [i for i in a if i not in b] print(difference) # ['e', 'l', 'l', 'o', ' ', 't', 'o', 'n'] # 嵌套循环 a = [1, 2, 3] b = [1, 2, 3] class_list = [i * j for i in a for j in b] print(class_list) # [1, 2, 3, 2, 4, 6, 3, 6, 9]
# 快速生成字典
info_list = [["tom", 18], ["lucy", 12]]
info_dict = {key: value for key, value in info_list}
print(info_dict)
# {'tom': 18, 'lucy': 12}
# 不建议使用循环嵌套
class_dict = {f"{i}年级": f"{j}班" for i in range(1, 4) for j in range(1, 4)}
print(class_dict)
# {'1年级': '3班', '2年级': '3班', '3年级': '3班'} #字典特性,键值唯一
# 快速生成集合
set1 = {i for i in range(1, 3)}
print(set1)
# {1, 2}
for
循环进行迭代,逐个访问生成的元素。这避免了一次性生成大量数据并占用大量内存的问题。yield
语句来控制生成元素的流程。可以根据条件判断、循环等控制结构来决定是否生成下一个元素。number_list = (i for i in range(3))
print(number_list, type(number_list))
for i in number_list:
print(i**i**i)
# <generator object <genexpr> at 0x000001FBAA212B90> <class 'generator'>
# 0
# 1
# 16
return
语句用于从函数中返回一个值(可以是字典等,非必须一个元素),并立即结束函数的执行。yield
语句定义生成器函数。当函数执行到yield
语句时,函数暂停,并将yield后面的表达式作为当前迭代的值返回,在当生成器调用next()
或使用for
循环时,函数从暂停的位置继续开始运行,直到遇见下一个yield
def function_yield():
yield "Hello"
yield "python"
# for循环
for info in function_yield():
print(info)
# next()函数
info = function_yield()
print(info)
print(next(info))
print(info)
print(next(info))
next(info) # 报错,因为已经下一个yield了
def eat(name): print("开始吃东西了") while True: food = yield print(f"{name}吃了{food}," + ('很好吃' if len(food) == 3 else '一般般')) eat = eat("tom") print(type(eat)) # generator eat.__next__() # 前进到yield关键字暂停 # next(eat) # eat.send(None) # print(type(eat)) # generator eat.send("土豆丝") eat.send("鸳鸯火锅") eat.close() # 退出循环
def fibonacci_generator(n): if n <= 0: return if n == 1: yield 1 return if n == 2: yield 1 yield 1 return a, b = 1, 1 yield a yield b for _ in range(n - 2): a, b = b, a + b yield b fibonacci_list = fibonacci_generator(10) for i in fibonacci_list: print(i)
def prime_generator(): yield 2 list1 = [2] i = list1[0] while True: i += 1 flag = True for num in list1: if int(i / num) == i/num: flag =False if flag: yield i list1.append(i) gen = prime_generator() # 生成并打印前10个素数 for _ in range(10): print(next(gen))
from itertools import count def prime_generator(): primes = [2] yield 2 for i in count(start=3, step=2): is_prime = all(i % prime != 0 for prime in primes if prime * prime <= i) if is_prime: primes.append(i) yield i gen = prime_generator() # 生成并打印前10个素数 for _ in range(10): print(next(gen))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。