摘要:迭代器對(duì)象從集合的第一個(gè)元素開(kāi)始訪問(wèn),直到所有的元素被訪問(wèn)完結(jié)束。迭代器有兩個(gè)基本的方法和。調(diào)用一個(gè)生成器函數(shù),返回的是一個(gè)迭代器對(duì)象。生成器函數(shù)生成器函數(shù)返回一個(gè)迭代器函數(shù)函數(shù)傳入不定長(zhǎng)參數(shù)加了星號(hào)的變量名會(huì)存放所有未命名的變量參數(shù)。
Python學(xué)習(xí)--最完整的基礎(chǔ)知識(shí)大全
關(guān)于python的基礎(chǔ)知識(shí)學(xué)習(xí),網(wǎng)上有很多資料,今天我就把我收藏的整理一下分享給大家!
下面是我基礎(chǔ)學(xué)習(xí)時(shí)的一點(diǎn)記錄:
python3 循環(huán)語(yǔ)句 1. whilen=10 sum = 0 counter = 1 while counter < n: sum = sum + counter counter += 1 print("1到%d之和為:%d" %(n, sum)) #while 循環(huán)使用 else 語(yǔ)句 count = 0 while count < 5: print (count, " 小于 5") count = count + 1 else: print (count, " 大于或等于 5")2. for
#可以使range以指定數(shù)字開(kāi)始并指定不同的增量(甚至可以是負(fù)數(shù),有時(shí)這也叫做"步長(zhǎng)") for i in range(0, 10, 3): print(i) for i in range(-10, -100, -30): print(i) a_list = ["google", "baidu", "ie", "firefox", "360"] for i in range(len(a_list)): print(i, a_list[i]) #使用range創(chuàng)建列表 b_list = list(range(8)) print(b_list)3. break和continue
#使用break終止循環(huán) for letter in "helloworld": if letter == "r": break print("當(dāng)前字母為:", letter) #使用continue跳過(guò)循環(huán) for letter in "helloworld": if letter == "l": continue print("當(dāng)前字母為:", letter)4. pass語(yǔ)句
#說(shuō)明:pass就是一條空語(yǔ)句。在代碼段中或定義函數(shù)的時(shí)候,如果沒(méi)有內(nèi)容,或者先不做任何處理,直接跳過(guò),就可以使用pass。 for letter in "helloworld": if letter == "l": pass print("執(zhí)行pass塊") print("當(dāng)前字母為:", letter)5. 使用enumerate函數(shù)進(jìn)行遍歷
c_list = [12, 34, 56, 78, 90] for i, j in enumerate(c_list): print(i, j)6. 小練習(xí)
for i in range(1, 6): for j in range(1, i+1): print("*",end="") print(" ")
for i in range(1, 10): for j in range(1, i+1): print("%d * %d = %d" %(j, i, i*j), end=" ") print(" ")
def paixu(d_list): for i in range(0, len(d_list)): for j in range(i+1, len(d_list)): if d_list[i] >= d_list[j]: tmp = d_list[i] d_list[i] = d_list[j] d_list[j] = tmp print(d_list) li = [32, 23, 65, 32, 76, 79, 56, 89, 12] paixu(li)Python3 迭代器與生成器 迭代器
迭代器是一個(gè)可以記住遍歷的位置的對(duì)象。
迭代器對(duì)象從集合的第一個(gè)元素開(kāi)始訪問(wèn),直到所有的元素被訪問(wèn)完結(jié)束。迭代器只能往前不會(huì)后退。
迭代器有兩個(gè)基本的方法:iter() 和 next()。
import sys it = iter(c_list) print(c_list) print(next(it)) for x in it: print(x, end=" ") it1 = iter(c_list) while True: try: print(next(it1)) except StopIteration: sys.exit()生成器
在 Python 中,使用了 yield 的函數(shù)被稱為生成器(generator)。
調(diào)用一個(gè)生成器函數(shù),返回的是一個(gè)迭代器對(duì)象。
在調(diào)用生成器運(yùn)行的過(guò)程中,每次遇到 yield 時(shí)函數(shù)會(huì)暫停并保存當(dāng)前所有的運(yùn)行信息,返回 yield 的值, 并在下一次執(zhí)行 next() 方法時(shí)從當(dāng)前位置繼續(xù)運(yùn)行。
def fibonacci(n): a = 0; b = 1; counter = 0; while True: if (counter > n): return yield a a, b = b, a + b counter += 1 #生成器函數(shù)返回一個(gè)迭代器 fibo = fibonacci(10) while True: try: print(next(fibo), end=" ") except: sys.exit()函數(shù) 函數(shù)傳入不定長(zhǎng)參數(shù)
#加了星號(hào)(*)的變量名會(huì)存放所有未命名的變量參數(shù)。如果在函數(shù)調(diào)用時(shí)沒(méi)有指定參數(shù),它就是一個(gè)空元組。我們也可以不向函數(shù)傳遞未命名的變量。 def printinfo(arg1, *vartuple): "打印任何傳入的參數(shù)" print("輸出:") print(arg1) for var in vartuple: print(var) return printinfo(10) printinfo(10, 20, 30)匿名函數(shù)
python 使用 lambda 來(lái)創(chuàng)建匿名函數(shù)。
所謂匿名,意即不再使用 def 語(yǔ)句這樣標(biāo)準(zhǔn)的形式定義一個(gè)函數(shù)。
lambda 只是一個(gè)表達(dá)式,函數(shù)體比 def 簡(jiǎn)單很多。
lambda的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。
lambda 函數(shù)擁有自己的命名空間,且不能訪問(wèn)自己參數(shù)列表之外或全局命名空間里的參數(shù)。
雖然lambda函數(shù)看起來(lái)只能寫一行,卻不等同于C或C++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時(shí)不占用棧內(nèi)存從而增加運(yùn)行效率。
sum = lambda arg1, arg2: arg1 + arg2 print(sum(10,20))變量的作用域
Python中變量的作用域一共有4種,分別是:
L (Local) 局部作用域
E (Enclosing) 閉包函數(shù)外的函數(shù)中
G (Global) 全局作用域
B (Built-in) 內(nèi)建作用域
以 L –> E –> G –>B 的規(guī)則查找,即:在局部找不到,便會(huì)去局部外的局部找(例如閉包),再找不到就會(huì)去全局找,再者去內(nèi)建中找。
B = int(2.9) # 內(nèi)建作用域 G = 0 # 全局作用域 def outer(): E = 1 # 閉包函數(shù)外的函數(shù)中 def inner(): L = 2 # 局部作用域一個(gè)完整的demo
import pickle import os datafile = "C:Users ootDesktopPyDemoperson.data" line = "#########################################" message = """ ####################################### *Welcome bookmark: * * press 1 to show list * * press 2 to add pepole * * press 3 to edit pepole * * press 4 to delete pepole * * press 5 to search pepole * * press 6 to show menu * * press 0 to quit * ####################################### """ #打印菜單欄 print(message) #創(chuàng)建一個(gè)人類,有姓名和電話號(hào)兩個(gè)屬性 class Person(object): def __init__(self, name, number): self.name = name self.number = number #獲取數(shù)據(jù) def get_data(filename = datafile): if os.path.exists(filename) and os.path.getsize(filename): with open(filename, "rb") as f: return pickle.load(f) return None #寫入數(shù)據(jù) def set_data(name, number, filename = datafile): personList = {} if get_data() == None else get_data() with open(filename, "wb") as f: personList[name] = Person(name, number) pickle.dump(personList, f) #保存字典格式的數(shù)據(jù)到文件 def save_data(dictPerson, filename = datafile): with open(filename, "wb") as f: pickle.dump(dictPerson, f) #顯示所有聯(lián)系人信息 def show_all(): personList = get_data() if personList: for v in personList.values(): print(v.name, v.number) print(line) else: print("空空如也,請(qǐng)?zhí)砑勇?lián)系人!") print(line) #添加聯(lián)系人 def add_person(name, number): set_data(name, number) print("添加聯(lián)系人成功!") print(line) #更新聯(lián)系人 def edit_person(name, number): personList = get_data() if personList: if name in personList.keys(): personList[name] = Person(name, number) save_data(personList) print("更改聯(lián)系人信息成功!") else: print("查無(wú)此人", name, ",請(qǐng)重試!") print(line) #刪除聯(lián)系人 def del_person(neme): personList = get_data() if personList: if name in personList: del personList[name] save_data(personList) print("刪除聯(lián)系人成功!") else: print(name, "不存在!") print(line) #查詢聯(lián)系人 def find_person(name): personList = get_data() if personList: if name in personList.keys(): print(personList.get(name).name, personList.get(name).number) else: print("查無(wú)此人!", name) print(line) while True: num = input(">>>") if num == "1": print("查看所有聯(lián)系人:") show_all() elif num == "2": print("添加聯(lián)系人:") name = input("請(qǐng)輸入聯(lián)系人姓名 >>") number = input("輸入聯(lián)系人電話號(hào) >>") add_person(name, number) show_all() elif num == "3": print("更新聯(lián)系人:") name = input("請(qǐng)輸入聯(lián)系人姓名 >>") number = input("輸入聯(lián)系人電話號(hào) >>") edit_person(name, number) show_all() elif num == "4": print("刪除聯(lián)系人:") name = input("請(qǐng)輸入聯(lián)系人姓名 >>") del_person(name) show_all() elif num == "5": print("查找聯(lián)系人:") name = input("請(qǐng)輸入聯(lián)系人姓名 >>") find_person(name) elif num == "6": print(message) elif num == "0": break else: print("輸入錯(cuò)誤,請(qǐng)重試!")
我的個(gè)人微信訂閱號(hào):【Java編程社區(qū)】 歡迎你的加入!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41543.html
摘要:為什么我會(huì)說(shuō)它們是一樣的簡(jiǎn)單思考一下我的后端書架后端掘金我的后端書架月前本書架主要針對(duì)后端開(kāi)發(fā)與架構(gòu)。一方案調(diào)研版本選擇當(dāng)前主流版本是和應(yīng)用的后臺(tái)運(yùn)行配置后端掘金醬油一篇,整理一下關(guān)于后臺(tái)運(yùn)行的一些配置方式。 分享 50 個(gè)完整的 React Native 項(xiàng)目 - 掘金本文為 Marno 原創(chuàng),轉(zhuǎn)載必須保留出處! 公眾號(hào) aMarno,關(guān)注后回復(fù) RN 加入交流群 簡(jiǎn)書專題《 Rea...
摘要:在線挑戰(zhàn),還沒(méi)用過(guò),貌似現(xiàn)在對(duì)英文資料心里還有種抵觸,必須克服實(shí)驗(yàn)樓研發(fā)工程師包含了等學(xué)習(xí)課程。書的作者就是開(kāi)發(fā)了用于數(shù)據(jù)分析的著名開(kāi)源庫(kù)的作者英文資料,對(duì)數(shù)據(jù)分析中要用到的一些庫(kù),等等做了簡(jiǎn)要介紹。形式的資料,示例代碼都很全。 showImg(https://segmentfault.com/img/remote/1460000004852849); 一、說(shuō)明 面對(duì)網(wǎng)絡(luò)上紛繁復(fù)雜的資...
摘要:做這一領(lǐng)域的工作,有很多網(wǎng)站能夠起到輔助性的作用。再加上爬蟲(chóng)相對(duì)于其他熱門方向來(lái)說(shuō),更容易學(xué)。也促使更多人會(huì)優(yōu)先選擇學(xué)習(xí)爬蟲(chóng)。能夠代替手工完成手工無(wú)法完成的測(cè)試任務(wù),并且可以記錄相關(guān)數(shù)據(jù)及報(bào)告。 ...
摘要:里,有兩種方法獲得一定范圍內(nèi)的數(shù)字返回一個(gè)列表,還有返回一個(gè)迭代器。在引用計(jì)數(shù)的基礎(chǔ)上,還可以通過(guò)標(biāo)記清除解決容器對(duì)象可能產(chǎn)生的循環(huán)引用的問(wèn)題。列舉常見(jiàn)的內(nèi)置函數(shù)的作用,過(guò)濾函數(shù),循環(huán)函數(shù)累積函數(shù)一行代碼實(shí)現(xiàn)乘法表。 showImg(https://segmentfault.com/img/remote/1460000019294205); 1、為什么學(xué)習(xí)Python? 人生苦短?人間...
閱讀 3525·2021-11-25 09:43
閱讀 1282·2021-09-08 09:45
閱讀 2656·2021-09-07 09:59
閱讀 1517·2021-08-09 13:45
閱讀 3370·2019-08-30 15:54
閱讀 707·2019-08-29 18:35
閱讀 524·2019-08-29 17:18
閱讀 1009·2019-08-29 14:10