2020年6月14日22:45:47
上一篇链接
https://blog.csdn.net/weixin_45556521/article/details/106732925
Python3 控制语句、函数、模块、文件与库
六、控制语句
end 关键字
关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符
# Fibonacci series: 斐波纳契数列
# 两个元素的总和确定了下一个数
a, b = 0, 1
while b < 1000:
print(b, end=',')
a, b = b, a+b
1.条件控制
- Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else
- 每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块
- 没有switch – case语句
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
2.循环控制
a.while
语句:
while 判断条件(condition):
执行语句(statements)……
例子:
n = 100
sum = 0
counter = 1
while counter <= n:
sum = sum + counter
counter += 1
print("1 到 %d 之和为: %d" % (n,sum))
CTRL+C 来退出当前的无限循环
无限循环:
var = 1
while var == 1 : # 表达式永远为 true
num = int(input("输入一个数字 :"))
print ("你输入的数字是: ", num)
print ("Good bye!")
语句:
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
例子:
count = 0
while count < 5:
print (count, " 小于 5")
count = count + 1
else:
print (count, " 大于或等于 5")
b.for
语句:
for <variable> in <sequence>:
<statements>
else:
<statements>
例子:
languages = ["C", "C++", "Perl", "Python"]
for x in languages:
print (x)
c.range()函数
如果你需要遍历数字序列,可以使用内置range()函数。它会生成数列
也可以使range以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做’步长’):
d.break 和 continue
break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
e.pass 语句
pass是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句
七、迭代器与生成器
1.迭代器
- 是访问集合元素的一种方式。
- 是一个可以记住遍历的位置的对象。
- 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
- 代器有两个基本的方法:iter() 和 next()。
- 字符串,列表或元组对象都可用于创建迭代器
iter()函数
# noinspection PyUnresolvedReferences
# encoding:utf-8
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x)
next() 函数
# noinspection PyUnresolvedReferences
# encoding:utf-8
import sys # 引入 sys 模块
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
还有一些知识需要面向对象的知识,先埋下一个坑
StopIteration
2.生成器
生成器是一个返回迭代器的函数,只能用于迭代操作
八、函数
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
def print_welcome(name):
print("Welcome", name)
w = 4
h = 5
print("area =", area(w, h))
1.python 函数的参数传递
a.不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
def ChangeInt( a ):
a = 10
b = 2
ChangeInt(b)
print( b ) # 结果是 2
b.可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
# 可写函数说明
def changeme( mylist ):
"修改传入的列表"
mylist.append([1,2,3,4])
print ("函数内取值: ", mylist)
return
# 调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print ("函数外取值: ", mylist)
函数参数的使用不需要使用指定顺序
def printinfo( name, age ):
"打印任何传入的字符串"
print ("名字: ", name)
print ("年龄: ", age)
return
#调用printinfo函数
printinfo( age=50, name="lushi" )
如果没有传递参数,则会使用默认参数
#可写函数说明
def printinfo( name, age = 35 ):
"打印任何传入的字符串"
print ("名字: ", name)
print ("年龄: ", age)
return
#调用printinfo函数
printinfo( name="runoob" )
2.不定长参数
需要一个函数能处理比当初声明时更多的参数。叫做不定长参数,声明时不会命名。
# 可写函数说明
#加了星号 * 的参数会以元组(tuple)的形式导入
def printinfoa( arg1, *vartuple ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
print (vartuple)
#加了两个星号 ** 的参数会以字典的形式导入
def printinfob( arg1, **vardict ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
print (vardict)
# 调用printinfoa 函数
printinfoa( 70, 60, 50 )
# 调用printinfob 函数
printinfob(1, a=2,b=3)
3.匿名函数
-
lambda 来创建匿名函数
-
匿名,意即不再使用 def 语句这样标准的形式定义一个函数
-
lambda 只是一个表达式,函数体比 def 简单很多。
-
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
-
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
-
lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语句lambda [arg1 [,arg2,.....argn]]:expression
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
4.return语句
用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None
# 可写函数说明
def sum( arg1, arg2 ):
# 返回2个参数的和."
total = arg1 + arg2
print ("函数内 : ", total)
return total
# 调用sum函数
total = sum( 10, 20 )
print ("函数外 : ", total)
5.强制位置参数(Python3.8)
/
用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式
#形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
f(10, 20, 30, d=40, e=50, f=60)
#错误调用
f(10, b=20, c=30, d=40, e=50, f=60) # b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f=60) # e 必须使用关键字参数的形式
未完待续。。。。