python模块

女生的网名这么多〃 提交于 2020-08-20 00:30:41

 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(博主视频教学主页)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!