python3官方入门教程(1)

python3官方入门教程: https://docs.python.org/zh-cn/3/tutorial/index.html

字符串

  • 字符串引号前添加 r 不会转义字符, r代表 raw
  • 两个字面值(非变量)可以直接连接, 当然也可以用 + 连接
>>> s = 'C:\some\name'
>>> s
'C:\\some\name'
>>> print(s)
C:\some
ame

>>> s = r'C:\some\name'
>>> s
'C:\\some\\name'
>>> print(s)
C:\some\name

>>> s = 'Hello'"world"
>>> s
'Helloworld'
>>> s = 'Hello' " World"
>>> s
'Hello World'

for ... else, while ... else

循环语句支持 else 子句;

  • for 循环中,可迭代对象中的元素全部循环完毕时,或 while 循环的条件为假时,执行该子句;
  • break 语句终止循环时,不执行该子句。
  • 与 if 语句相比,循环的 else 子句更像 try 的 else 子句: try 的 else 子句在未触发异常时执行,循环的 else 子句则在未运行 break 时执行。
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, '=', x, '*', n//x)
            break
    else:
        # loop fell through without finding a factor
        # for 遇到 break 跳出循环才执行 else
        print(n, ' 是质数')

'''
2  是质数
3  是质数
4 = 2 * 2
5  是质数
6 = 2 * 3
7  是质数
8 = 2 * 4
9 = 3 * 3
'''

print('\n')
n = 2
while n < 10:
    x =2 
    while x < n:
        if n % x == 0:
            print(n, '=', x, '*', n//x)
            break
        x+=1
    else:
        # loop fell through without finding a factor
        # while 遇到 break 跳出循环才执行 else
        print(n, ' 是质数')

    n+=1

'''
2  是质数
3  是质数
4 = 2 * 2
5  是质数
6 = 2 * 3
7  是质数
8 = 2 * 4
9 = 3 * 3
'''

函数

函数在 执行时(非定义时) 使用函数局部变量符号表,所有函数变量赋值都存在局部符号表中;引用变量时:

  • 首先,在局部符号表里查找变量,
  • 然后,是外层函数局部符号表,
  • 再是全局符号表,
  • 最后是内置名称符号表。

函数也是一种对象, 其默认值只计算一次。默认值为列表、字典或类实例等可变对象时,会出现与预想结果有差异的现象:

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))
'''
[1]
[1, 2]
[1, 2, 3]
'''
def f2(a, L=None):
    # 不想在后续调用之间共享默认值时,应以如下方式编写函数
    if L is None:
        L = []
    L.append(a)
    return L

print(f2(1))
print(f2(2))
print(f2(3))
'''
[1]
[2]
[3]
'''

参数划分: /* 是可选的。这些符号表明形参如何把参数值传递给函数:位置、位置或关键字、关键字。关键字形参也叫作命名形参。

/* 将参数区域划分为三部分:

  • / 左侧全部为位置参数
  • * 右侧全为关键字参数
def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
      -----------    ----------     ----------
        |             |                  |
        |        Positional or keyword   |
        |                                - Keyword only
         -- Positional only

函数注解

函数注解 是可选的用户自定义函数类型的元数据完整信息(详见 PEP 3107 和 PEP 484 )。

标注 以字典的形式存放在函数的 __annotations__ 属性中,并且不会影响函数的任何其他部分。 形参标注的定义方式是在形参名后加冒号,后面跟一个表达式,该表达式会被求值为标注的值。 返回值标注的定义方式是加组合符号 ->,后面跟一个表达式,该标注位于形参列表和表示 def 语句结束的冒号之间

问题是这注解并不能限定输入的参数类型啊.

def f(a:int, b:float = 0.0) -> float:
    print("Annotations:", f.__annotations__)
    print("Arguments:", a,b)
    return a+b

print(f(1,2))
print(f('a','b'))
'''
Annotations: {'a': <class 'int'>, 'b': <class 'float'>, 'return': <class 'float'>}
Arguments: 1 2
3
Annotations: {'a': <class 'int'>, 'b': <class 'float'>, 'return': <class 'float'>}
Arguments: a b
ab
'''

数据结构

  • 不是所有数据都可以排序或比较。例如,[None, 'hello', 10] 就不可排序,因为整数不能与字符串对比,而 None 不能与其他类型对比。
  • 有些类型根本就没有定义顺序关系,例如,3+4j < 5+7j 这种对比操作就是无效的。

同时循环两个或多个序列时,用 zip() 函数可以将其内的元素一一匹配

a = [1,2,3]
b = [4,5,6]
c = [7,8,9]

for x,y,z in zip(a,b,c):
    print(x,y,z)
'''
1 4 7
2 5 8
3 6 9
'''

比较操作

  • 比较操作支持链式操作。例如,a < b == c 校验 a 是否小于 b,且 b 是否等于 c。
  • 比较操作可以用布尔运算符 and 和 or 组合,并且,比较操作(或其他布尔运算)的结果都可以用 not 取反。这些操作符的优先级低于比较操作符
  • not 的优先级最高,and次之, or 的优先级最低,因此,A and not B or C 等价于 (A and (not B)) or C。与其他运算符操作一样,此处也可以用圆括号表示想要的组合。

序列的比较:序列对象可以与相同序列类型的其他对象比较。这种比较使用 字典式 顺序

  • 首先,比较前两个对应元素,如果不相等,则可确定比较结果;如果相等,则比较之后的两个元素,以此类推,直到其中一个序列结束。
  • 如果要比较的两个元素本身是相同类型的序列,则递归地执行字典式顺序比较。如果两个序列中所有的对应元素都相等,则两个序列相等。
  • 如果一个序列是另一个的初始子序列,则较短的序列可被视为较小(较少)的序列。
  • 对于字符串来说,字典式顺序使用 Unicode 码位序号排序单个字符。

https://docs.python.org/zh-cn/3/tutorial/modules.html

© Licensed under CC BY-NC-SA 4.0

我从事投资时, 会观察一家公司的全貌; 而大多数投资人只盯着它的股价。——巴菲特

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!