Table of Contents
Table of Contents
1. Python程式的結構
2. 子產品
2.1 子產品的建立
2.2 子產品的屬性
2.3 子產品的内置函數
1. appy()
2. filter()
3. reduce()
4.map()
5 自定義包
3. 函數
3.1 格式
3.2 仿switch源碼
3.3 lambda函數
3.4 generator函數
1. Python程式的結構
Python程式由包、子產品、類、函數組成,子產品是處理一類問題的集合,子產品由函數和類組成,包是由一系列子產品構成;
2. 子產品
2.1 子產品的建立
建立一個子產品檔案:myPython.py
count = 0
def func():
#引用全局變量
global count
count = count + 1
print("myModule.func() count=%d" % count)
class MyClass:
def MyFunc(self):
print("myModule.MyClass.myFunc()");
在同一個目錄下建立一個檔案:helloworld.py
#導入子產品
import myModule
#使用子產品中的func函數
myModule.func()
#使用子產品中的類
myClass = myModule.MyClass()
myClass.MyFunc()
print("-----------------------")
#導入子產品中的函數或類
from myModule import func
#直接使用子產品的函數
func()
運作結果:
C:\Python\Python38\python.exe "E:/python/python project/hello world.py"
myModule.func() count=1
myModule.MyClass.myFunc()
-----------------------
myModule.func() count=2
總結:
關于導入子產品的幾種方式
1. import xxxx_module
2. from xxxx_module import xxxx_func
3. from xxxx_module import *
2.2 子產品的屬性
__name__:用于判斷目前子產品是否是程式的入口,如果目前程式正在被使用,__name__的值為“__main__”;
__doc__:用于顯示目前子產品的資訊,其為子產品字元串,子產品字元串寫在Python檔案的第一行,三個引号包含起來的字元串;
myModule.py
""""This is my myModule.py"""
if __name__ == '__main__':
print("myModule作為主程式")
else:
print("myModule被另外一個子產品調用")
print(__doc__)
helloworld.py
""" This is my helloWorld.py"""
#導入子產品
import myModule
print(__doc__)
輸出結果:
C:\Python\Python38\python.exe "E:/python/python project/hello world.py"
myModule被另外一個子產品調用
"This is my myModule.py
This is my helloWorld.py
2.3 子產品的内置函數
1. appy()
Python3中移除了該函數;
2. filter()
filter()可以對某個序列做過濾處理,判斷自定義函數的參數傳回的結果是否為真來過濾,并一次性傳回處理結果;
格式:
filter(function or Nome, iterable)->filter object
源碼:
def func(x):
if x > 0:
return x;
#filter内置函數傳回對象
print(filter(func, range(-1, 10, 1)))
#filter對象轉換為函數
print(list(filter(func, range(-1, 10, 1))))
輸出結果:
C:\Python\Python38\python.exe "E:/python/python project/hello world.py"
<filter object at 0x000000000209D5B0>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
3. reduce()
對序列中元素的連續操作可以通過循環來處理,例如對某個序列中的元素累加操作
源碼:
輸出結果:
C:\Python\Python38\python.exe "E:/python/python project/hello world.py"
x=0, y=1
x=1, y=2
x=3, y=3
x=6, y=4
10
------------------------------------
x=10, y=0
x=10, y=1
x=11, y=2
x=13, y=3
x=16, y=4
20
------------------------------------
10
------------------------------------
4.map()
map()對tuple元組進行“解包”操作,調用時設定map()的第一個參數為None,map()的功能非常強大,可以對多個序列的每個元素都執行相同的操作,并傳回一個map對象;
源碼:
def power(x):
print("x=%d" % x)
return x ** x
print(map(power, range(1, 3)))
print(list(map(power, range(1, 5))))
輸出結果:
C:\Python\Python38\python.exe "E:/python/python project/hello world.py"
<map object at 0x00000000021DD5B0>
x=1
x=2
x=3
x=4
[1, 4, 27, 256]
5 自定義包
與2.2中提到的__name__描述一樣,這裡不再贅述。
3. 函數
3.1 格式
def func(param1, param2,...):
....
return xxx;
3.2 仿switch源碼
def math(x, y, operator):
results = {
"+" : x + y,
"-" : x - y,
"*" : x * y,
"/" : x / y,
"%" : x % y,
}
return results.get(operator)
print(math(1, 3, "+"))
print(math(1, 3, "-"))
print(math(1, 3, "*"))
print(math(1, 3, "/"))
print(math(1, 3, "%"))
結果:
C:\Python\Python38\python.exe "E:/python/python project/hello world.py"
4
-2
3
0.3333333333333333
1
3.3 lambda函數
格式:
func = lambda 變量1,變量2... : 表達式
代碼:
def func():
x = 1
y = 2
z = 3
sum = lambda x,y,z : x + y + z
print(sum)
print(sum(x, y, z))
func()
結果:
C:\Python\Python38\python.exe "E:/python/python project/hello world.py"
<function func.<locals>.<lambda> at 0x000000000229D160>
6
3.4 generator函數
格式:
def func(x)
...
yield 表達式
yield關鍵字與return關鍵字的傳回值和執行原理都不相同。yield生成值并不會中止程式的執行,傳回值後程式繼續往後執行。return傳回值後,程式将中止執行。