真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Two---python循環(huán)語(yǔ)句/迭代器生成器/yield與return/自定義函數(shù)與匿名函數(shù)/參數(shù)傳遞

python基礎(chǔ)02

條件控制

  1. python條件語(yǔ)句是通過(guò)一條或多條語(yǔ)句的執(zhí)行結(jié)果(Ture或者False)來(lái)執(zhí)行的代碼塊
  2. python中用elif代替了else if,所以if語(yǔ)句的關(guān)鍵字為:if-elif-else。
  • 注意
  • 每個(gè)條件后面都要用冒號(hào):,表示接下來(lái)是滿足條件后要執(zhí)行的語(yǔ)句塊
  • 使用縮進(jìn)來(lái)劃分語(yǔ)句塊,相同縮進(jìn)數(shù)的語(yǔ)句在一期組成一個(gè)語(yǔ)句塊
  • 在python中沒(méi)有switch-case語(yǔ)句
#if-else語(yǔ)句
age = int(input("請(qǐng)輸入年齡:"))
if age >= 7:
    print("可以上小學(xué)")
else:
    print("年齡未滿足要求,不可以上小學(xué)")
---------------------------------------------------
請(qǐng)輸入年齡:8
可以上小學(xué)
---------------------------------------------------
請(qǐng)輸入年齡:3
年齡未滿足要求,不可以上小學(xué)
#if-elif語(yǔ)句
holiday_name = input("請(qǐng)輸入節(jié)日:")
if holiday_name == '兒童節(jié)':
    print("是小孩子的節(jié)日!")
elif holiday_name == '端午節(jié)':
    print("今天要吃粽子?。?)
elif holiday_name == '情人節(jié)':
    print("今天要買(mǎi)一束花送給她!")
else :
    print("今天是努力的一天!")
#if嵌套語(yǔ)句
list1 = [1,3,5,9,'apple','bee']
a = input("請(qǐng)輸入")
if a in list1:
    if a == 'apple':
        print("Ture")
    else:
        print(False)
else:
    print("請(qǐng)重新嘗試")
---------------------------------------------------
請(qǐng)輸入apple
Ture

三元運(yùn)算(三目運(yùn)算)

三元運(yùn)算符是對(duì)簡(jiǎn)單的條件語(yǔ)句的簡(jiǎn)寫(xiě)

創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)提供固鎮(zhèn)企業(yè)網(wǎng)站建設(shè),專(zhuān)注與網(wǎng)站制作、成都網(wǎng)站制作、H5頁(yè)面制作、小程序制作等業(yè)務(wù)。10年已為固鎮(zhèn)眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

  • 寫(xiě)法:max = a if a>b else b
#三元運(yùn)算符
a = int(input("輸入a:"))
b = int(input("輸入b:"))
print("a大于b") if a>b else print("b大于a") if a

循環(huán)語(yǔ)句

python中的循環(huán)語(yǔ)句有for和while

  1. 在python中沒(méi)用do....while循環(huán)
  2. 可以通過(guò)設(shè)置條件表達(dá)式永遠(yuǎn)不為false來(lái)實(shí)現(xiàn)無(wú)限循環(huán)

while循環(huán)

while循環(huán)使用else語(yǔ)句:如果while后面的體哦阿健語(yǔ)句為false時(shí),澤執(zhí)行else的句塊

#一般形式
while 判斷條件(condition):
      執(zhí)行語(yǔ)句(statements)....
#while循環(huán)語(yǔ)句
count = 0
while count < 5:
    print(count,"小于5")
    count = count + 1
else :
    print(count,"大于等于5")
---------------------------------------------------
0 小于5
1 小于52 小于5
3 小于5
4 小于5
5 大于等于5

for循環(huán)

for循環(huán)可以遍歷任何可迭代對(duì)象

  • 字符串/列表/元組/字典/集合/generator(生成器)/iterator(迭代器)都是可迭代的
  • 可用for去訪問(wèn)上述中內(nèi)的每一個(gè)元素
  • break語(yǔ)句用于跳出當(dāng)前循環(huán)體
#本金元存入銀行,年利率是千分之三,每過(guò)1年,將本金和利息相加作為新的本金。計(jì)算5年后,獲得的本金是多少?
benjin = 
nianlilv = 0.0003

for i in range(1,6):
    new = (benjin*nianlilv+benjin)
    benjin = new
print("五年后獲得的本金為:",benjin)
----------------------------------------------------
五年后獲得的本金為: .00

遍歷技巧

在字典遍歷中,關(guān)鍵字和對(duì)應(yīng)的值可以使用items()方法同時(shí)解讀出來(lái):items()方法以列表返回試圖對(duì)象,是一個(gè)可便利的key/value對(duì)

#items()方法字典遍歷
knights = {'gallahad':'the pure','robin':'the brave'}
for k,v in knights.items():
    print(k,v)
---------------------------------------------------
gallahad the pure
robin the brave

在序列遍歷中,索引位置和對(duì)應(yīng)值可以使用enumerate()函數(shù)同時(shí)得到:enumerate()函數(shù)用于可便利的數(shù)據(jù)對(duì)象(如列表、元組、字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用于for循環(huán)當(dāng)中

#enumerate()函數(shù)進(jìn)行序列遍歷
for i,v in enumerate(['tic','tac','toe']):
    print(i,v)
---------------------------------------------------
0 tic
1 tac
2 toe

同時(shí)遍歷兩個(gè)或多個(gè)序列時(shí),可以使用zip()組合。如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長(zhǎng)度與最短的對(duì)象相同,利用 ***** 號(hào)操作符,可以將元組解壓為列表。

#zip()函數(shù)將對(duì)象元素打包
a = [1,2,3]
b = {'ada','dasd','ads','aaaa'}
for x,y in zip(a,b):
    print(x,y)
---------------------------------------------------
1 dasd
2 aaaa
3 ads
#zip()函數(shù)依次取出二位列表的每列函數(shù)
list1 = [[1, 2, 3, 4, 5, 6], 
         [1, 3, 5, 7, 9, 11], 
         [3, 4, 5, 6, 8, 9],
         [2, 4, 6, 8, 10, 12],
         [0, 3, 5, 7, 9, 0], 
         [5, 6, 8, 2, 3 ,4]]
for i in zip(*list1):
    print(i)

reversed()函數(shù)返回一個(gè)反轉(zhuǎn)的迭代器,因此要反轉(zhuǎn)一個(gè)序列,首先指定這個(gè)序列然后調(diào)用reversed()函數(shù)

#reversed()函數(shù)反轉(zhuǎn)迭代器
star = "qwert"
print(list(reversed(star)))
-----------------------------------------------------
['t', 'r', 'e', 'w', 'q']

要按順序遍歷一個(gè)序列,可以使用sorted()函數(shù)返回一個(gè)已經(jīng)排序的序列,并不修改原值。

  • sorted()函數(shù)可以對(duì)所有可迭代對(duì)象進(jìn)行排序操作
  • list.sort()方法改變的為原始的list,返回值為None,而sorted()返回的是一個(gè)新的list,不會(huì)在原來(lái)的list基礎(chǔ)上進(jìn)行改變
  • list.sort()方法只為list定義,而sorted()函數(shù)可以接受任何的iterable(迭代對(duì)象)
#sorted()函數(shù)遍歷排序
a = sorted([5,6,2,4,3,9,8]) #默認(rèn)升序
print(a) 
b = a.sort() #list.sort方法返回的是原始的列表,值為None
print(b)
-----------------------------------------------------
[2, 3, 4, 5, 6, 8, 9]
None

Pass語(yǔ)句

在python中pass是空語(yǔ)句,是為了保持程序結(jié)構(gòu)的完整性,pass不做任何事情,一般用做占位語(yǔ)句

#pass語(yǔ)句占位
while True:
    pass
-----------------------------------------------------
#返回為空

迭代器與生成器

  1. 迭代器是python最強(qiáng)大的功能之一,是訪問(wèn)集合元素的一種方式
  2. 迭代器是一個(gè)可以記住遍歷的位置的對(duì)象
  3. 迭代器對(duì)象從集合的第一個(gè)元素開(kāi)始訪問(wèn),直到所有的元素被訪問(wèn)結(jié)束;迭代器只能前進(jìn)不能后退
  4. 迭代器有兩個(gè)基本的方法:iter()和next()
  5. 字符串,列表或元組對(duì)象都可用于創(chuàng)建迭代器
#簡(jiǎn)單的迭代器
list1 = [1,2,4,5,6]
a = iter(list1) #創(chuàng)建迭代器對(duì)象
print(next(a)) #輸出迭代器的下一元素
print(next(a))
print(next(a))
-----------------------------------------------------
1
2
4

迭代器對(duì)象可以使用常規(guī)for語(yǔ)句進(jìn)行遍歷

#使用for語(yǔ)句進(jìn)行迭代器遍歷
list1 = [1,2,4,5,6]
a = iter(list1)
for x in a:
    print(x,end="") #end傳遞空字符串,意為末尾不換行加空格
-----------------------------------------------------

生成器/yield與return區(qū)別

什么是生成器?可以通俗的認(rèn)為,在一個(gè)函數(shù)中,使用yield來(lái)代替return的位置的函數(shù)就是生成器

yield

  1. 在python中,使用了yield的函數(shù)被稱(chēng)為生成器(generator)
  2. 跟普通函數(shù)不同的是,生成器是一個(gè)返回迭代器的函數(shù),只能用于迭代操作,更簡(jiǎn)單點(diǎn)理解生成器就是一個(gè)迭代器
  3. 在調(diào)用生成器運(yùn)行的過(guò)程中,每次遇到y(tǒng)ield時(shí)函數(shù)會(huì)暫停并保存當(dāng)前所有的運(yùn)行信息,返回yield的值,并在下一次執(zhí)行next()方法時(shí)從當(dāng)前位置繼續(xù)運(yùn)行
  4. 調(diào)用一個(gè)生成器函數(shù),返回的是一個(gè)迭代器對(duì)象

return

  1. ruturn每次返回的是一個(gè)list列表,空間占用較大
  2. return只會(huì)返回一個(gè)值,且return后面的代碼不會(huì)執(zhí)行

不同之處

  1. yield在調(diào)用生成器的時(shí)候,會(huì)將數(shù)據(jù)生成為object,每次需要調(diào)用next()函數(shù)進(jìn)行下一步的執(zhí)行,同時(shí)不可逆
  2. yield輸出的是一個(gè)對(duì)象,相當(dāng)于容器,想要什么數(shù)據(jù)就取出什么數(shù)據(jù),而return只會(huì)返回一個(gè)值,且后面代碼不會(huì)執(zhí)行
  3. 參考一個(gè)很好的例子:水車(chē),先yield來(lái)裝入數(shù)據(jù)、產(chǎn)出generator object、使用next()來(lái)釋放;好比水車(chē)轉(zhuǎn)動(dòng)后,車(chē)輪上的水槽裝入水,隨著輪子轉(zhuǎn)動(dòng),被轉(zhuǎn)到下面的水槽就能將水送入水道中流入田里。

yield相較于return的優(yōu)點(diǎn)

  • 反應(yīng)更迅速
  • 更節(jié)省空間
  • 使用更加靈活

參考

  • (77條消息) python中的yield和return的區(qū)別_AcceptedLin的博客-CSDN博客_python yield和return的區(qū)別

函數(shù)

  1. 函數(shù)是組織好的,可重復(fù)使用的,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段
  2. 函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率

自定義函數(shù)

自定義函數(shù)規(guī)則

  1. 自定義函數(shù)代碼塊以def關(guān)鍵詞開(kāi)頭,后接函數(shù)標(biāo)識(shí)符名稱(chēng)和圓括號(hào)()
  2. 任何傳入?yún)?shù)和自變量必須放在圓括號(hào)中間,圓括號(hào)之間可以用于定義參數(shù)
  3. 函數(shù)的第一行語(yǔ)句可以選擇性的使用文檔字符串——用于存放函數(shù)說(shuō)明(即注釋?zhuān)梢允褂?.doc 進(jìn)行調(diào)用文檔字符串屬性)
  4. 函數(shù)內(nèi)容以冒號(hào):起始,并且縮進(jìn)
  5. return【表達(dá)式】結(jié)束函數(shù),選擇性的返回一個(gè)值給調(diào)用方,不帶表達(dá)式的return相當(dāng)于返回None
#自定義函數(shù)求圓的面積
import math
pi=math.pi #引用Π值

def yuan(r):
    s = pi*r*r
    return s
r = float(input("請(qǐng)輸入半徑:"))
s = print(yuan(r))
---------------------------------------------------
請(qǐng)輸入半徑:5
78.

參數(shù)傳遞

參數(shù)傳遞分為傳不可變對(duì)象以及傳可變對(duì)象

  • ps:見(jiàn)One可變數(shù)據(jù)與不可變數(shù)據(jù)類(lèi)型

參數(shù)

以下是調(diào)用函數(shù)時(shí)可使用的正式參數(shù)類(lèi)型:

必須參數(shù)/關(guān)鍵字參數(shù)/默認(rèn)參數(shù)/不定長(zhǎng)參數(shù)

必須參數(shù)

  • 必須參數(shù)需要以正確的順序傳入函數(shù)。因此也叫位置參數(shù),調(diào)用時(shí)的數(shù)量必須和聲明時(shí)的一樣,且位置參數(shù)必須放置在關(guān)鍵詞參數(shù)之前
#調(diào)用printme()函數(shù)
def printme(str): 
    print(str) #打印任何傳入的字符串
    return
printme() #未傳參報(bào)錯(cuò)
---------------------------------------------------
TypeError: printme() missing 1 required positional argument: 'str'

關(guān)鍵字參數(shù)

  • 關(guān)鍵字參數(shù)和函數(shù)調(diào)用關(guān)系緊密,函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來(lái)確定傳入的參數(shù)值
  • 使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時(shí)參數(shù)的順序與聲明時(shí)不一致,因?yàn)閜ython解釋器能夠用參數(shù)名匹配參數(shù)值
#調(diào)用printinfo()函數(shù)
def printinfo(name,age):
    print("姓名:",name)
    print("年齡:",age)
    return
printinfo(age=19,name="runoob")
---------------------------------------------------
姓名: runoob
年齡: 19

默認(rèn)參數(shù)

  • 調(diào)用函數(shù)時(shí),如果沒(méi)用傳遞參數(shù),則會(huì)使用默認(rèn)參數(shù)
  • 如下如果沒(méi)用傳入age參數(shù),則使用默認(rèn)值
#默認(rèn)參數(shù)
def printinfo(name,age = 35):
    print("姓名:",name)
    print("年齡:",age)
    return
printinfo(age=19,name="runoob")
print("------------------------------")
printinfo(name="runoob")
---------------------------------------------------
姓名: runoob
年齡: 19
------------------------------
姓名: runoob
年齡: 35

不定長(zhǎng)參數(shù)

  • 如果在函數(shù)調(diào)用時(shí)沒(méi)用指定參數(shù),它就是一個(gè)空元組,我們也可以不向函數(shù)傳遞未命名的變量
  • 不定長(zhǎng)參數(shù)類(lèi)型有兩種:1.*+參數(shù)名 2.**+參數(shù)名
*+參數(shù)名
  • 這種情況下在調(diào)用時(shí)會(huì)自動(dòng)組裝成一個(gè)元組
  • 允許傳入0個(gè)或任意多個(gè)參數(shù)
#不定長(zhǎng)參數(shù)第一種
def sum(*crad):
    sum = 0
    for weight in crad:
        sum += weight
        if sum > 500:
            print("超重了!再不下,就給你一個(gè)大筆兜")
    return sum
sum_s = sum(50,80,200,200) #自動(dòng)組成一個(gè)元組傳入形參
----------------------------------------------------
超重了!再不下,就給你一個(gè)大筆兜
**+參數(shù)名
  • 允許傳入0個(gè)或任意多個(gè)參數(shù)
  • 這些參數(shù)會(huì)被自動(dòng)組裝成一個(gè)字典,而不是元組
  • 實(shí)參必須包含參數(shù)名,參數(shù)名作為字典的鍵,參數(shù)值作為字典的值
#不定長(zhǎng)參數(shù)第二種
def student_n(**info):
    print(info)
    dict = info
    return dict
dict = student_n(name="小王",id="001",score="82")
----------------------------------------------------
{'name': '小王', 'id': '001', 'score': '82'}
單獨(dú)出現(xiàn)*的參數(shù)

聲明函數(shù)時(shí),參數(shù)中星號(hào)*可以單獨(dú)出現(xiàn),如果單獨(dú)出現(xiàn)星號(hào)后的參數(shù)必須用關(guān)鍵字傳入

#*關(guān)鍵字傳參
def f(a,b,*,c):
    return a+b+c
f(1,2,3) #星號(hào)后未用關(guān)鍵字傳參導(dǎo)致報(bào)錯(cuò)
----------------------------------------------------
Traceback (most recent call last):
  File "f:/python_prictace/02-python.py", line 187, in 
    f(1,2,3)
TypeError: f() takes 2 positional arguments but 3 were given
#*關(guān)鍵字傳參
def f(a,b,*,c):
    return a+b+c
print(f(1,2,c=3))
----------------------------------------------------
6
混合使用
#混合使用
def foo(*args,**kargs):
    print(args)
    print(kargs)
foo(a=2,1,2,3) 
#當(dāng)同時(shí)使用*和**時(shí),必須將*的參數(shù)列在**的前面,否則會(huì)報(bào)錯(cuò)
----------------------------------------------------
File "f:/python_prictace/02-python.py", line 196
    foo(a=2,1,2,3)
            ^
SyntaxError: positional argument follows keyword argument
#混合使用
def foo(*args,**kargs):
    print(args)
    print(kargs)
foo(1,2,3,a=2) 
----------------------------------------------------
(1, 2, 3)
{'a': 2}

匿名函數(shù)

  1. python使用lambda來(lái)創(chuàng)建匿名哈桉樹(shù)
  2. 所謂匿名函數(shù),意為不再使用def語(yǔ)句標(biāo)準(zhǔn)的形式定義一個(gè)函數(shù)
  3. lambda只是一個(gè)表達(dá)式,函數(shù)體比def簡(jiǎn)單的多
  4. lambda的主體時(shí)一個(gè)表達(dá)式,而不是一個(gè)代碼塊;僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去
  5. lambda函數(shù)擁有自己的命名空間,且不能訪問(wèn)自己參數(shù)列表之外或全局命名空間里的參數(shù)
  6. 雖然lambda函數(shù)看起來(lái)只能寫(xiě)一行,卻不同于c或c++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時(shí)不占用棧內(nèi)存,從而增加運(yùn)行效率
#lambda表達(dá)式創(chuàng)建一元二次方程
def fx(a,b,c):
    return lambda x : a*x*x + b*x + c
f = fx(1,2,3)
print(f(3))
----------------------------------------------------
18

當(dāng)前題目:Two---python循環(huán)語(yǔ)句/迭代器生成器/yield與return/自定義函數(shù)與匿名函數(shù)/參數(shù)傳遞
地址分享:http://weahome.cn/article/dsogjds.html

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部