条件语句
Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。
# if语句的一般形式如下:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
# if 语句简写
if condition_1: statement_block_1
statement_block_1 if condition_1 else statement_block_2
# if语句支持嵌入if
while循环
# while语句的一般形式
while condition:
statement_block
# while ... else ...结构,如果 while 后面的条件语句为 false 时,则执行 else 的语句块。
while condition:
statement_block
else:
statement_block
# 利用break语句,可以终止循环,跳出while循环
i = 1
while i < 7:
print(i)
if i == 3:
break
i += 1
# continue 语句,停止当前迭代,继续下一个
i = 0
while i < 7:
i += 1
if i == 3:
continue
print(i)
for 循环
Python for 循环可以遍历任何可迭代对象,如列表,元组,字典,集合或字符串。
fruits = ["apple", "banana", "cherry"]
for x in fruits:
print(x)
# 利用break语句可以终止for循环
fruits = ["apple", "banana", "cherry"]
for x in fruits:
print(x)
if x == "banana":
break
#使用 continue 语句,我们可以停止循环的当前迭代,并继续下一个
fruits = ["apple", "banana", "cherry"]
for x in fruits:
if x == "banana":
continue
print(x)
# range() 函数,返回一个数字序列,默认情况下从 0 开始,并递增 1(默认地),并以指定的数字结束(左闭右开)
# for 循环中的 else 关键字指定循环结束时要执行的代码块
for x in range(10):
print(x)
else:
print("Finally finished!")
# for循环支持嵌套循环
函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
定义函数规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和()
- 任何传入参数和自变量必须放在()中,()中用于定义参数
- 函数的第一行语句可以选择性地使用文档字符串 用于存放函数说明
- 函数内容以冒号:起始,并且缩进
- return语句 结束函数,选择性地返回一个值给调用方,不带表达式地return相当于返回None
def 函数名(参数):
函数体
调用函数
如需调用函数,请使用函数名称后跟括号:
函数参数分为形式参数、默认参数、关键字参数、不定长参数*args以及**keys
函数支持递归方式,即定义的函数能够调用自身。
匿名函数
即lambda函数,可接受任意参数量地参数,但只能有一个表达式:
lambda arguments : expression
- lambda 只是一个表达式,函数体比 def 简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
作用域
局部作用域:在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用。
全局作用域: 在 Python 代码主体中创建的变量是全局变量,属于全局作用域。全局变量在任何范围(全局和局部)中可用。
如果在函数内部和外部操作同名变量,Python 会将它们视为两个单独的变量,一个在全局范围内可用(在函数外部),而一个在局部范围内可用(在函数内部)
Global 关键字 :使变量成为全局变量。
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
print(num)
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
迭代器和生成器
迭代器
迭代是访问集合元素地一种方式。
迭代器是一种对象,该对象包含值的可计数数字。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()
字符串,列表或元组对象都可用于创建迭代器
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple) # 创建迭代器
print(next(myit)) 获取下一个元素
print(next(myit))
# 创建迭代器
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
# StopIteration语句
#如果你有足够的 next() 语句,或者在 for 循环中使用,则上面的例子将永远进行下去。为了防止迭代永远进行,我们可以使用 StopIteration 语句。
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
生成器
python中,使用yield函数被称为生成器
生成器是一个返回迭代器的函数, 只能用于迭代操作
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()