python 基础语法

 Python中默认的编码格式是 ASCII 格式

只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了
注意:Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。

Python 中的标识符是区分大小写的

以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入;
以双下划线开头的 __foo 代表类的私有成员;以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
Python 可以同一行显示多条语句,方法是用分号 ; 分开

python 最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。

Python语句中一般以新行作为语句的结束符。
但是我们可以使用斜杠( \)将一行的语句分为多行显示
单行注释采用 # 开头
多行注释使用三个单引号(''')或三个双引号(""")

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

 

多个变量赋值
Python允许你同时为多个变量赋值。例如:
a = b = c = 1
以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。
您也可以为多个对象指定多个变量。例如:
a, b, c = 1, 2, "john"
以上实例,两个整型对象 1 和 2 分别分配给变量 a 和 b,字符串对象 "john" 分配给变量 c。

当你指定一个值时,Number对象就会被创建:
var1 = 1
var2 = 10
您也可以使用del语句删除一些对象的引用。
del语句的语法是:
del var1[,var2[,var3[....,varN]]]]

python的字串列表有2种取值顺序:
从左到右索引默认0开始的,最大范围是字符串长度少1
从右到左索引默认-1开始的,最大范围是字符串开头
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素

classmates.append('Adam')
classmates.insert(1, 'Jack')
要删除list末尾的元素,用pop()方法
要删除指定位置的元素,用pop(i)方法
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置classmates[1] = 'Sarah'

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改
不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple

 

dict字典
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}

Key不存在的错误,有两种办法,一是通过in判断key是否存在
二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
set可以看成数学意义上的无序和无重复元素的集合

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

如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return

空函数

如果想定义一个什么事也不做的空函数,可以用pass语句:

def nop():
pass
pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。


数据类型检查可以用内置函数isinstance()实现

 

import math

def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny


原来返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。


定义默认参数要牢记一点:默认参数必须指向不变对象!

我们把函数的参数改为可变参数:

def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数

*nums表示把nums这个list的所有元素作为可变参数传进去

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict


**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。

尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

L[0:3]==L[:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素

L[-2:] 后两个

字符串'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串'ABCDEFG'[:3]

dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()

要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))


列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式
[x * x for x in range(1, 11)]
[x * x for x in range(1, 11) if x % 2 == 0]
[m + n for m in 'ABC' for n in 'XYZ']

这种一边循环一边计算的机制,称为生成器:generator
第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator

如果一个函数定义中包含yield关键字,那么这通函数,而是一个generator

 

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义
Python允许用'''...'''的格式表示多行内容

空值是Python里一个特殊的值,用None表示
还有一种除法是//,称为地板除,两个整数的除法仍然是整数
对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符
Python对bytes类型的数据用带b前缀的单引号或双引号表示

 

posted @ 2021-11-11 21:35  chinlly  阅读(83)  评论(0)    收藏  举报