https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2&shareId=400000000398149(博主录制)
(原创声明,转载引用需要指明来源)
模块概述
Python 模块(Module),是一个文件,用 .py 结尾。模块包含了 Python 对象定义和Python语句。模块能够有逻辑地组织 Python 代码段,把相关的代码分配到一个模块里能让开发人员的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。
下例是个简单的模块 simpleModule.py:
# -*- coding: utf-8 -*-
"""
最简单的模块
"""
def PrintName(name): #定义一个函数
print("hello:",name)#输出信息
导入模块三种形式
只有导入模块后才能使用。导入有多种方法,每种方法对名称空间都有不同的影响。
模块引入形式主要有三种形式,用math模块为例,分别如下:
(1) import math(推荐)
这是进行导入的最简单方法,通常建议这样做。您可以使用模块名称作为前缀来访问模块的名称空间。这意味着您可以在程序中使用与模块中相同的名称,但可以同时使用它们。当您导入多个模块时,就可以清晰辨别特定名称属于哪个模块。
import math #导入math模块
a=10 #创建变量a,赋值10
b=math.sqrt(a) #对变量a取平方根
print(b) #输出变量b值
(2)from math import sqrt
这会将名称(或几个名称,用逗号分隔)直接从模块的名称空间导入程序的名称空间。要使用导入的名称,您不再需要使用前缀,而只需直接使用名称。如果您确定只需要使用几个名称,这将很有用。缺点是您无法在自己的程序中将导入的名称用于其他名称。例如,您可以使用add()代替Integer.add(),但是如果您的程序具有add()函数,则您将无法访问Integer的add()函数。
from math import sqrt #从math模块导入sqrt方法
a=10 #创建变量a,赋值10
b=sqrt(a) #对变量a取平方根
print(b) #输出变量b值
(3)from math import*
这会将所有名称从math直接导入到模块的名称空间中。通常这不是一个好主意,因为它会导致“名称空间污染”。如果您发现自己在代码中编写此代码,则最好使用第一种导入类型。
这些导入与功能一样,也适用于类和其他数据。导入可能会对它们对名称空间的影响造成混淆。这种方式可以让代码更加整洁,但需要倍加注意名称空间混乱的问题。
from math import* #从math模块导入所有名称
a=10 #创建变量a,赋值10
b=sqrt(a) #对变量a取平方根
print(b) #输出变量b值
dir()函数
dir() 函数一个排好序的字符串列表,contents是一个模块里定义过的名字。
返回的列表容纳了在一个模块里定义的所有模块,变量和函数。如下一个简单的实例
import math #导入math模块
contents=dir(math) #把math模块包含对象保存到变量contents
print(contents) #输出math模块包含对象
Contents返回列表如下:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil',
'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum',
'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf',
'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
help()函数
help() 函数用于查看函数或模块用途的详细说明。例如我们想查看math模块是干啥用的,
就用help(math),下图中描述了math是python内置模块,是用于访问数学函数的。Math模块的函数也一一说明用途。
help(math) #查看math模块用途的详细说明
Help on built-in module math:
NAME
math
DESCRIPTION
This module provides access to the mathematical functions
defined by the C standard.
FUNCTIONS
acos(x, /)
Return the arc cosine (measured in radians) of x.
acosh(x, /)
Return the inverse hyperbolic cosine of x.
asin(x, /)
Return the arc sine (measured in radians) of x.
asinh(x, /)
Return the inverse hyperbolic sine of x.
atan(x, /)
Return the arc tangent (measured in radians) of x.
atan2(y, x, /)
Return the arc tangent (measured in radians) of y/x.
Unlike atan(y/x), the signs of both x and y are considered.
atanh(x, /)
Return the inverse hyperbolic tangent of x.
ceil(x, /)
Return the ceiling of x as an Integral.
This is the smallest integer >= x.
copysign(x, y, /)
Return a float with the magnitude (absolute value) of x but the sign of y.
On platforms that support signed zeros, copysign(1.0, -0.0)
returns -1.0.
cos(x, /)
Return the cosine of x (measured in radians).
cosh(x, /)
Return the hyperbolic cosine of x.
degrees(x, /)
Convert angle x from radians to degrees.
erf(x, /)
Error function at x.
erfc(x, /)
Complementary error function at x.
exp(x, /)
Return e raised to the power of x.
expm1(x, /)
Return exp(x)-1.
This function avoids the loss of precision involved in the direct evaluation of exp(x)-1 for small x.
fabs(x, /)
Return the absolute value of the float x.
factorial(x, /)
Find x!.
Raise a ValueError if x is negative or non-integral.
floor(x, /)
Return the floor of x as an Integral.
This is the largest integer <= x.
fmod(x, y, /)
Return fmod(x, y), according to platform C.
x % y may differ.
frexp(x, /)
Return the mantissa and exponent of x, as pair (m, e).
m is a float and e is an int, such that x = m * 2.**e.
If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0.
fsum(seq, /)
Return an accurate floating point sum of values in the iterable seq.
Assumes IEEE-754 floating point arithmetic.
gamma(x, /)
Gamma function at x.
gcd(x, y, /)
greatest common divisor of x and y
hypot(x, y, /)
Return the Euclidean distance, sqrt(x*x + y*y).
isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
Determine whether two floating point numbers are close in value.
rel_tol
maximum difference for being considered "close", relative to the
magnitude of the input values
abs_tol
maximum difference for being considered "close", regardless of the
magnitude of the input values
Return True if a is close in value to b, and False otherwise.
For the values to be considered close, the difference between them
must be smaller than at least one of the tolerances.
-inf, inf and NaN behave similarly to the IEEE 754 Standard. That
is, NaN is not close to anything, even itself. inf and -inf are
only close to themselves.
isfinite(x, /)
Return True if x is neither an infinity nor a NaN, and False otherwise.
isinf(x, /)
Return True if x is a positive or negative infinity, and False otherwise.
isnan(x, /)
Return True if x is a NaN (not a number), and False otherwise.
ldexp(x, i, /)
Return x * (2**i).
This is essentially the inverse of frexp().
lgamma(x, /)
Natural logarithm of absolute value of Gamma function at x.
log(...)
log(x, [base=math.e])
Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
log10(x, /)
Return the base 10 logarithm of x.
log1p(x, /)
Return the natural logarithm of 1+x (base e).
The result is computed in a way which is accurate for x near zero.
log2(x, /)
Return the base 2 logarithm of x.
modf(x, /)
Return the fractional and integer parts of x.
Both results carry the sign of x and are floats.
pow(x, y, /)
Return x**y (x to the power of y).
radians(x, /)
Convert angle x from degrees to radians.
remainder(x, y, /)
Difference between x and the closest integer multiple of y.
Return x - n*y where n*y is the closest integer multiple of y.
In the case where x is exactly halfway between two multiples of
y, the nearest even value of n is used. The result is always exact.
sin(x, /)
Return the sine of x (measured in radians).
sinh(x, /)
Return the hyperbolic sine of x.
sqrt(x, /)
Return the square root of x.
tan(x, /)
Return the tangent of x (measured in radians).
tanh(x, /)
Return the hyperbolic tangent of x.
trunc(x, /)
Truncates the Real x to the nearest Integral toward 0.
Uses the __trunc__ magic method.
DATA
e = 2.718281828459045
inf = inf
nan = nan
pi = 3.141592653589793
tau = 6.283185307179586
FILE
(built-in)
我们也可以用help()函数查看math模块里某个函数用法,例如输入help(math.sqrt)。下图显示该函数返回一个数的平方根。
help(math.sqrt) #查看math模块里sqrt函数用法
Help on built-in function sqrt in module math:
sqrt(x, /)
Return the square root of x.
函数命名空间
(1)命名空间本质--字典
变量是映射到对象的名称(标识符)。名称空间是变量名(键)及其对应对象(值)的字典。
Python语句可以访问本地名称空间和全局名称空间中的变量。如果局部变量和全局变量具有相同的名称,则局部变量将覆盖全局变量。
每个函数都有其自己的本地名称空间。类方法遵循与普通函数相同的作用域规则。
Python对变量是局部变量还是全局变量进行了有根据的猜测。假定在函数中分配了任何值的任何变量都是局部变量。
因此,为了向函数内的全局变量分配值,必须首先使用global语句。
语句global VarName告诉Python VarName是全局变量。 Python停止在本地名称空间中搜索变量。
例如,我们在全局名称空间中定义一个变量Money。在功能Money中,我们为Money指定一个值。因此,Python假定Money是局部变量。但是,我们在设置之前访问了局部变量Money的值,因此结果为UnboundLocalError。取消注释全局语句即可解决该问题。
(2)Python有多个命名空间
对于Python,可能有多个名称空间可用于确定与变量关联的对象。
请记住,名称空间是名称和对象的关联。
例如宇宙,不同星球是不同命名空间。即使不同星球存在相同人名,但也是不同的人。函数也是一样,即使名字一样,但不同函数对象是不一样的。所以最好使用不同变量名,以免混淆。
(3)函数的命名空间
当一个函数被执行时,他产生了自己的命名空间。局部变量只能被指定函数访问--局部作用域,函数调用后,命名空间关闭。如果一个变量是局部赋值的,赋值前不能被引用。
下例中,程序执行到第二个语句AddMoney()时,由于没有函数内money没有赋值,直接引用money=money+1,结果出错。
money=200 #创建一个money变量,赋值200
def AddMoney(): #创建一个AddMoney函数
money=money+1 #创建一个表达式,money变量自加1
print(money) #输出money变量
AddMoney() #调用AddMoney函数
200 #输出money变量为函数外变量,值为200
#调用AddMoney函数时报错。函数内money没有赋值,直接引用money=money+1,结果出#错。
Traceback (most recent call last):
File "<ipython-input-6-95d4a4095290>", line 6, in <module>
AddMoney()
File "<ipython-input-6-95d4a4095290>", line 3, in AddMoney
money=money+1
UnboundLocalError: local variable 'money' referenced before assignment
(4)命名空间生命周期
命名空间创建时期和生存周期都不一样. python编译器启动时,包含内置变量名的命名空间就创建了,并不会被删除。 对一个模块,当模块定义后,其全局命名空间也创建了。一般情况下编译器退出后模块命名空间就关闭了。
https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149(博主视频教学主页)
来源:oschina
链接:https://my.oschina.net/u/4254968/blog/4300767