python学习笔记(二)
- 斐波纳契数列:两个元素的总和确定了下一个数
a,b = 0,1
while b<=100:
print(b,end=',')
a,b = b,a+b
- if语句
#Python中没有switch – case语句
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
- 循坏语句
#else是判断条件False时执行,可以没有,break跳出循坏体,countine退出当前循环,进入下一次循环
#python没有do...while循环
while 判断条件:
语句
else:
语句
#如果while循环体中只有一条语句,可以简写
while(判断条件):print("heihei")
##################
for <variable> in <sequence>:
<statements>
else:
<statements>
- range()
#生成数列
range(5) # 0,1,2,3,4
range(5,9) # 5,6,7,8
range(0,10,3) # 0,3,6,9 指定步长
range(-10, -100, -30) # -10,-40,-70
#结合range()和len()函数以遍历一个序列的索引
for i in range(len(list))
#range()创建列表
list(range(5)) # [0,1,2,3,4]
-
pass语句
pass是空语句,是为了保持程序结构的完整性。 -
迭代器
迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next(),分别用于创建迭代器对象和访问迭代器下一个元素。
字符串,列表或元组对象都可用于创建迭代器。
把一个类作为一个迭代器使用需要在类中实现两个方法__iter__() 与__next__()
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 #循环结束后,触发 StopIteration 异常,结束迭代。
myclass = MyNumbers() #类的实例
myiter = iter(myclass) #类作为迭代器
for x in myiter:
print(x)
-
构造方法__init__()
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。
总结:实例不能访问私有属性或方法! -
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。生成器是一个返回迭代器的函数,只能用于迭代操作。
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=" ") #调用f的next()方法
except StopIteration:
sys.exit()
- 函数
函数参数传递可变/不可变对象的区别:
传不可变参数,相当于值传递,函数内部对参数重新赋值,函数外参数的值没有改变。可变参数,相当于引用传递,指向对象的指针没有变,所以对参数重新赋值,外部使用这个参数对值也会变。
return [表达式] 语句用于退出函数,不带表达式的return语句返回None。
#参数形式分为:必需参数、关键字参数、默认参数、不定长参数
#必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
printinfo( age=50, name="runoob" ) #关键字参数,和顺序无关
def printinfo( name, age = 35 ): #定义函数时默认参数值
def printinfo( arg1, *vartuple ): # *表示多余对参数以元组形式导入,**表示以字典形式导入
def f(a,b,*,c): #定义函数时,*单独出现,表示后面对参数必须以关键字参数导入
- 匿名函数
#使用 lambda 来创建匿名函数,不能访问自己参数列表之外或全局命名空间里的参数。
sum = lambda arg1, arg2: arg1 + arg2
- 变量作用域
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,也就是说除了以上,在其他代码块定义的变量,外部也可以访问。
L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域
查找顺序: L –> E –> G –>B
想要修改外部变量,使用**global(修改全局变量) 和 nonlocal(修改闭包函数外的函数中的变量)**关键字