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 必須使用關鍵字參數的形式
未完待續。。。。