Python系列(2)- Python 基本概念、内置模块、基础语法

 

1. 基本概念

      模块 (Module):

        在 Python 中,有三种方式创建模块:

            (1) 创建一个 Python 文件;
            (2) 用 C 语言实现,然后在运行时动态加载,比如常用的正则表达式模块 re;
            (3) 内置模块,直接 import;

    包 (package):

        包就是多个模块的集合。当项目较大,模块较多时,就可以把模块放在包中,便于管理。

        Python 的包有 Regular packages 和 Namespace packages。

        Regular packages 指目录下有__init__.py文件,并且允许嵌套,即目录下可以嵌套一个同样是 package 的子目录。Namespace packages 也是有层次结构的模块组织,不过它不必须存在于文件夹,可以存在 Zip、网络上等,且子包与父包也不必存于同一个地方。

        Python 提供的内置模块,可以直接使用 import 导入,比如 math、os、sys 等。

 

    库(library):

        严格来说,Python 中没有库 (library) 的概念,模块 (module) 和包 (package) 才是 Python 语法中有的概念。
        
        这个库的概念是从其他编程语言引进来的,库的概念是具有相关功能模块和包的集合,只是一个通俗的说法。

        Python 标准库是指在 Python 安装目录的 Lib 目录下的模块和包,它是安装 Python 程序时自带的。第三方库也是 Python 库,一般通过 pip 安装到 site-packages 目录 。


    import 语句:

        想使用 Python 源文件(模块),只需在另一个源文件(模块)里执行 import 语句,语法如下:

            import module

        当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入,搜索路径是一个解释器会先进行搜索的所有目录的列表。
        
        一个模块只会被导入一次,不管执行了多少次 import。

    from … import 语句:

        使用 from package import item 这种形式的时候,对应的 item 既可以是包里面的子模块(子包),也可以是模块下的函数、类或者变量。

 

    命名:

        每个变量都拥有一个名字,这个就是命名,给变量命名。变量命名也是让很多程序员头疼的一件事情,怎么样能起一些有意义,又高大上的名字。在 Python 中,一切皆对象,我们甚至可以给一个函数一个命名,命名就可以理解为所有对象的一个引用的名称。

    命名空间:

        命名空间就是用来保证命名之间不发生冲突的规则,分为:

            (1) 局部命名空间:在一个程序中为每个函数创建的命名空间,当函数执行完毕就失效;
            (2) 全局命名空间:在程序中为所有模块创建的命名空间,当程序执行完毕失效;
            (3) 内置命名空间:也就是默认的一些命名,退出程序失效;

 

    迭代器 (Iterator):

        迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

        Python 中使用迭代器的地方很多,大多数的容器对象都是可迭代对象,如列表、元组、字典、字符串等,均可以使用 for 语句进行迭代循环。

    生成器 (Generator):

        生成器 (Generator) 是 Python 中用来生成迭代器 Iterator 的一种特殊函数。

        生成器是 Python 中实现迭代器的一种高效且优雅的方法,它利用 yield 关键字来简化迭代过程,并带来内存效率和代码可读性的双重提升。

    装饰器 (decorator):

        装饰器(decorators)是 Python 中的一种高级功能,它允许你动态地修改函数或类的行为。

        装饰器是一种函数,它接受一个函数作为参数,并返回一个新的函数或修改原来的函数。

        装饰器的语法使用 @decorator_name 来应用在函数或方法上。

 

2. 内置模块(包)

    1) os 模块

        os 模块提供操作系统相关联的函数。

        示例,进入 Python 交互模式:


            >>> import os
            >>> os.getcwd()      # 返回当前的工作目录
            'C:\\'
            >>> os.chdir('/temp')   # 修改当前的工作目录
            >>> os.system('mkdir today')   # 执行系统命令 mkdir
            0

            建议使用 "import os" 风格而非 "from os import *"。这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。

    2) sys 模块

        sys 是 system 的缩写,可以用来获取操作系统和编译器的一些配置,设置及操作。

        示例:

            >>> import sys
            >>> s = sys.stdin.read()
            Hello world
            ^Z                  # Windows 下 Python 交互模式,^Z 表示同时按下 Ctrl + z 键,然后按回车键,Linux 下使用 Ctrl + d 键
            >>> s
            'Hello world'

    3) time 模块

        time 模块提供了处理时间的函数,例如获取当前时间、格式化日期和时间、计时等。

        示例:

            >>> import time
            >>> t = time.ctime()
            >>> t
            'Wed Aug 28 17:12:19 2022'

    4) datetime 模块

        datetime 模块为日期和时间处理同时提供了简单和复杂的方法。

        支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。

        示例:

            >>> from datetime import date
            >>> now = date.today()
            >>> now
            datetime.date(2022, 10, 24)
            >>> now.strftime("%Y-%m-%d is a %A on the %d day of %B.")
            '2022-10-24 is a Monday on the 24 day of October.'

            >>> d1 = date(1980, 1, 1)
            >>> age = now - d1
            >>> age.days
            15637


    5) random 模块

        random 模块提供了生成随机数的函数,例如生成随机整数、浮点数、序列等。

        示例:

            >>> import random
            >>> a = random.randint(1, 10)
            >>> a
            7


     6) math 模块

        math 模块是内置模块,包含许多对浮点数的数学运算函数。math 模块下的函数,返回值均为浮点数,除非另有明确说明。如果需要计算复数,请使用 cmath 模块中的同名函数。

        示例:

            >>> import math

            >>> dir(math)

            ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 
'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 
'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 
'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt',
 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 
'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc'] 

  
    7) re 模块

        re 模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案:

            >>> import re
            >>> re.findall(r'\bg[a-z]*', 'good morning, go home, get up')
            ['good', 'go', 'get']
            >>> re.sub(r'(\b[a-z]+) \1', r'\1', 'have a nice nice day')
            'have a nice day'

        如果只需要简单的功能,应该首先考虑字符串方法,因为它们非常简单,易于阅读和调试:

            >>> 'go up'.replace('go', 'get')
            'get up'
 
    8) json 模块
 
        json 模块提供了对JSON数据的编码和解码功能。

        示例:

            >>> import json
            >>> str = '{"name": "python", "age": 10}'
            >>> obj = json.loads(str)
            >>> obj['name']
            'python'

    9) zlib 模块

        以下模块直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile。

            >>> import zlib
            >>> s = b'witch which has which witches wrist watch'
            >>> len(s)
            41
            >>> t = zlib.compress(s)
            >>> len(t)
            37
            >>> zlib.decompress(t)
            b'witch which has which witches wrist watch'
            >>> zlib.crc32(s)
            226805979


    10) timeit 模块
    
        Python 提供了一个性能度量工具 timeit,可以度量不同方法之间的性能差异。

        例如,使用元组封装和拆封来交换元素相比使用传统的方法,timeit 证明了元组方法更快一些。

            >>> from timeit import Timer
            >>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
            0.0191244000000097
            >>> Timer('a,b = b,a', 'a=1; b=2').timeit()
            0.015919700000040393

        相对于 timeit 的细粒度,:mod:profile 和 pstats 模块提供了针对更大代码块的时间度量工具。

 

     11) 内置函数

        Python3 内置函数:

        abs()    dict()    help()    min()    setattr()
        all()    dir()    hex()    next()    slice()
        any()    divmod()    id()    object()    sorted()
        ascii()    enumerate()    input()    oct()    staticmethod()
        bin()    eval()    int()    open()    str()
        bool()    exec()    isinstance()    ord()    sum()
        bytearray()    filter()    issubclass()    pow()    super()
        bytes()    float()    iter()    print()    tuple()
        callable()    format()    len()    property()    type()
        chr()    frozenset()    list()    range()    vars()
        classmethod()    getattr()    locals()    repr()    zip()
        compile()    globals()    map()    reversed()    __import__()
        complex()    hasattr()    max()    round()    reload()
        delattr()    hash()    memoryview()    set()


        示例:

       >>> print("Hello world!")
       Hello world!

3. 基础语法

    Python 是一种解释型的脚本编程语言,这样的编程语言一般支持两种代码运行方式:

        (1) 交互式编程: 在命令行窗口中直接输入代码,按下回车键就可以运行代码,并立即看到输出结果;执行完一行代码,你还可以继续输入下一行代码,再次回车并查看结果……整个过程就好像我们在和计算机对话,所以称为交互式编程。
        (2) 编写源文件: 创建一个源文件,将所有代码放在源文件中,让解释器逐行读取并执行源文件中的代码,直到文件末尾,也就是批量执行代码。这是最常见的编程方式,也是我们要重点学习的。

    1) Hello World 程序

        (1) 交互式

            Python 交互式编程环境,第一种方法是在命令行工具或者终端(Terminal)窗口中输入 python 命令,看到 >>> 提示符就可以开始输入代码,这里以 Windows 终端为例,如下所示:

                D:\>python
                Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
                Type "help", "copyright", "credits" or "license" for more information.
                >>> print("Hello world!")
                Hello world!
                >>>

            第二种方法是打开 Python 自带的 IDLE 工具,具体操作与第一种方法类似。        
    
        (2) 编写源文件

            内容如下:

                #!/usr/bin/python3
                
                # 注释1
                # 注释2
                
                '''
                注释3
                注释4
                '''
                
                """
                注释5
                注释6
                """

                print("Hello world!")

 

            保存为 D:\hello.py, 打开 cmd 命令窗口,进入 D:\

                D:\> python hello.py
                    
                    Hello World

            在 Sublime Text 里运行:

                使用 Sublime Text 打开 D:\hello.py 文件,在菜单栏中依次找到 “Tools -> Build System”,然后选择“Python”。然后按 "Ctrl+B" 组合键或者选择 Tools 菜单中的 “Build” 选项,就可以运行 Python 程序。运行结果为:

                    Hello World!
                    [Finished in 1.0s]

    2) 编码

        默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:

            # -*- coding: cp-1252 -*-

        上述定义允许在源文件中使用 Windows-1252 字符集中的字符编码,对应适合语言为保加利亚语、白罗斯语、马其顿语、俄语、塞尔维亚语。

    3) 标识符

        在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。标识符的命名规则:

            (1) 第一个字符必须是字母表中字母或下划线 _ ;
            (2) 标识符的其他的部分由字母、数字和下划线组成;
            (3) 标识符对大小写敏感;

    4) python 保留字

        保留字即关键字,不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字,进入交互模式输入如下代码:

            >>> import keyword
            >>> keyword.kwlist

    5) 注释

        Python 单行注释以 # 开头,多行注释可以用多个 # 号,还有 ''' 和 """。

    6) 行与缩进

        Python 使用缩进来表示代码块,不需要使用大括号 {} 。

        缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:

            if True:
                print ("True")
            else:
                print ("False")

        以下代码最后一行语句缩进数的空格数不一致,会导致运行错误:

            if True:
                print ("Answer")
                print ("True")
            else:
                print ("Answer")
              print ("False")    # 缩进不一致,会导致运行错误

        执行后会出现类似以下错误:

            File "test.py", line 6
                print ("False")    # 缩进不一致,会导致运行错误

            IndentationError: unindent does not match any outer indentation level

    7) 多行语句

        Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 \ 来实现多行语句,例如:

            total = item_one + \
                    item_two + \
                    item_three

        在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \,例如:

            total = ['item_one', 'item_two', 'item_three',
                    'item_four', 'item_five']

     8) 空行

        函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

        空行与代码缩进不同,空行并不是 Python 语法的一部分。书写时不插入空行,Python 解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。

        注:空行也是程序代码的一部分。

    9) 等待用户输入

        执行下面的程序在按回车键后就会等待用户输入:

            #!/usr/bin/python3
 
            input("\n\n按下 enter 键后退出。")

            以上代码中 ,\n\n 在结果输出前会输出两个新的空行。一旦用户按下 enter 键时,程序将退出。


    10) 同一行多条语句

        Python 可以在同一行中使用多条语句,语句之间使用分号 ; 分割,以下是一个简单的实例:

            #!/usr/bin/python3
 
            import sys; x = 'test'; sys.stdout.write(x + '\n')

    11) 多个语句构成代码组

        缩进相同的一组语句构成一个代码块,我们称之代码组。

        if、while、def 和 class 这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。

        将首行及后面的代码组称为一个子句 (clause)。

        示例:

            if condition :
                语句
            elif condition :
                语句
            else :
                语句

    12) print 输出

        print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=""。

        #!/usr/bin/python3

        
        x="a"
        y="b"
        # 换行输出
        print( x )
        print( y )
        
        print('---------')
        # 不换行输出
        print( x, end=" " )
        print( y, end=" " )
        print()

 

posted @ 2022-10-25 18:07  垄山小站  阅读(677)  评论(0)    收藏  举报