• Python语法


    一、Python基础

    1. 数据类型和变量

    数据类型:整数、浮点数、字符串、布尔值、空值(None)
    变量:变量名必须是大小写英文、数字和_的组合,且不能用数字开头
    常量:常量就是不能变的变量,在Python中,通常用全部大写的变量名表示常量

    2. 字符串和编码

    字符编码

    ASCII编码:127位最早
    GB2312编码:中文编入
    Unicode:统一的一套编码
    UTF-8编码:把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。

    Python的字符串

    Python字符串是以Unicode编码的
    Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符

    在文件开头写上这两行:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    • 1
    • 2

    第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

    第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

    格式化

    %s永远起作用,它会把任何数据类型转换为字符串

    3. list和tuple

    list

    list是一种有序的集合,可以随时添加和删除其中的元素。

    tuple

    元组,tuple和list非常类似,但是tuple一旦初始化就不能修改

    4.条件判断

    if <条件判断1>:
        <执行1>
    elif <条件判断2>:
        <执行2>
    elif <条件判断3>:
        <执行3>
    else:
        <执行4>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5. 模式匹配

    如果要针对某个变量匹配若干种情况,可以使用match语句

    score = 'B'
    
    match score:
        case 'A':
            print('score is A.')
        case 'B':
            print('score is B.')
        case 'C':
            print('score is C.')
        case _: # _表示匹配到其他任何情况
            print('score is ???.')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6. 循环

    for…in循环

    names = ['Michael', 'Bob', 'Tracy']
    for name in names:
        print(name)
    
    • 1
    • 2
    • 3

    while循环

    sum = 0
    n = 99
    while n > 0:
        sum = sum + n
        n = n - 2
    print(sum)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    break
    在循环中,break语句可以提前退出循环
    continue
    在循环过程中,也可以通过continue语句,跳过当前的这次循环,直接开始下一次循环。

    7. dict 和 set

    dict

    Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
    和list比较,dict有以下几个特点:

    1. 查找和插入的速度极快,不会随着key的增加而变慢;
    2. 需要占用大量的内存,内存浪费多。

    set

    set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

    二、函数

    1. 调用函数

    Python内置了很多有用的函数,我们可以直接调用。

    比如求绝对值的函数abs

    >>> abs(100)
    100
    
    • 1
    • 2

    数据类型转换

    Python内置的常用函数还包括数据类型转换函数,比如int()函数可以把其他数据类型转换为整数:

    >>> int('123')
    123
    
    • 1
    • 2

    2. 定义函数

    在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

    def my_abs(x):
        if x >= 0:
            return x
        else:
            return -x
    
    • 1
    • 2
    • 3
    • 4
    • 5

    参数检查

    调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError

    3. 函数的参数

    • 位置参数: 对于power(x)函数,参数x就是一个位置参数
    • 默认参数:
    def power(x, n=2):
        s = 1
        while n > 0:
            n = n - 1
            s = s * x
        return s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    设置默认参数时,有几点要注意

    一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);

    二是如何设置默认参数。

    当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

    • 可变参数: 传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个
    • 关键字参数: 允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
    • 命名关键字参数: 如果要限制关键字参数的名字,就可以用命名关键字参数.
      例如,只接收city和job作为关键字参数。这种方式定义的函数如下:
    def person(name, age, *, city, job):
        print(name, age, city, job)
    
    • 1
    • 2
    • 参数组合:
      在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

    4. 递归函数

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

    def fact(n):
        if n==1:
            return 1
        return n * fact(n - 1)
    
    • 1
    • 2
    • 3
    • 4

    三、高级特性

      1. 切片
        L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3
      1. 迭代
        如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
      1. 列表生成式
        列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
        举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):
      1. 生成器
        在Python中,一边循环一边计算的机制,称为生成器:generator。
      1. 迭代器
        可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

    四、函数式编程

    1. 高阶函数

    • map/reduce
    • filter
    • sorted 排序

    2. 返回函数

    • 函数作为返回值
      高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
    • 闭包
      注意到返回的函数在其定义内部引用了局部变量args,所以,当一个函数返回了一个函数后,其内部的局部变量还被新函数引用,所以,闭包用起来简单,实现起来可不容易。
    • nonlocal
    def inc():
        x = 0
        def fn():
            nonlocal x
            x = x + 1
            return x
        return fn
    
    f = inc()
    print(f()) # 1
    print(f()) # 2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    x作为局部变量并没有初始化,直接计算x+1是不行的。但我们其实是想引用inc()函数内部的x,所以需要在fn()函数内部加一个nonlocal x的声明。加上这个声明后,解释器把fn()的x看作外层函数的局部变量,它已经被初始化了,可以正确计算x+1

    3. 匿名函数

    当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
    匿名函数lambda x: x * x实际上就是:

    def f(x):
        return x * x
    
    • 1
    • 2

    关键字lambda表示匿名函数,冒号前面的x表示函数参数。

    4. 装饰器

    在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

    5. 偏函数

    通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。
    functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:

    >>> import functools
    >>> int2 = functools.partial(int, base=2)
    >>> int2('1000000')
    64
    >>> int2('1010101')
    85
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    五、模块

    模块定义

    在Python中,一个.py文件就称之为一个模块(Module)。
    为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。
    举个例子,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。

    现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放:

    mycompany
    ├─ init.py
    ├─ abc.py
    └─ xyz.py
    引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz

    请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompan

    使用模块

      1. 使用import xx导入模块
      1. 作用域
      • 正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等;
      • 类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名;
      • 类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等;

    安装第三方模块

    在Python中,安装第三方模块,是通过包管理工具pip完成的。

    pip install Pillow
    
    • 1

    安装常用模块

    可以从Anaconda官网下载GUI安装包,下载后直接安装,Anaconda会把系统Path中的python指向自己自带的Python,并且,Anaconda安装的第三方模块会安装在Anaconda自己的路径下,不影响系统已安装的Python目录。

    模块搜索路径

    1. 直接修改sys.path,添加要搜索的目录:
    >>> import sys
    >>> sys.path.append('/Users/michael/my_py_scripts')
    
    • 1
    • 2

    这种方法是在运行时修改,运行结束后失效。

    1. 设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。
      设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。

    参考资料:
    廖雪峰官网

  • 相关阅读:
    优化资源利用率:kubernetes中装箱的好处与挑战
    PGsql设置自增ID
    Greenplum 对比 Hadoop
    剑指 Offer II 098. 路径的数目 / 剑指 Offer II 099. 最小路径之和
    LeetCode·每日一题·907.子数组的最小值之和·动态规划
    SpringCloud之NamedContextFactory
    webSocket chapter 1
    vue路由传递参数(五)路由嵌套,子路由写法,以及从定向
    限制条件加入构造范围:Gym - 102832L
    《乔布斯传》英文原著重点词汇笔记(五)【 chapter three 】
  • 原文地址:https://blog.csdn.net/guoxulieying/article/details/133879804