Table of Contents
Table of Contents
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返回值后,程序将中止执行。
详见:https://blog.csdn.net/mieleizhi0522/article/details/82142856