python基础知识点

python论坛:

1. python 脚本格式

前2行格式如下,第一行是表示用python执行,第二行是通用字符集,任何语言都能正常显示。

1)#!/usr/bin/env python

2)#_*_coding:utf-8_*_ (貌似写成#coding=utf-8也行)

其实上面的语句怎么写都行,只要符合coding[ := ]\s*([-\w.]+); 意思就是coding后面要紧紧的跟着冒号或者等号,之后可随意多少个空格,然后接utf-8,coding=utf-8前后随意加字符都行。

\w匹配的是能组成单词的字符

\s表示空格

3)第三行最好用双引号来写一个脚本文档,来对此脚本做解释

"......."

4)多行注释,三个双引号开头,三个双引号结尾。

"""

......

......

"""

注意,第一行很多人会写成#!/usr/bin/python,如果是系统默认有的python这样写是没错的,但是如果你升级了一个python,那么这个新版的python可能就会安装在usr/local/bin目录下,如果加上env,就会直接使用 新版的python,因为新装的python会自动写在env中。

2017/8/11 15:03

一. 编程风格

1. 语法要求,缩进统一: 属于同一代码块,也就是同一级别,相互之间没有依存关系的语言缩进必须是一致的,不然就会报错

注意,如果是在window下用notepad写的代码,用tab进行缩进时,需要在notepad中进行tab建和空格键的转换设置,在首选项中可设置。

2. 变量由字母,下划线,数字组成

标识符的第一个字符必须是字母表中的字符(大小写都行)或者一个下划线

标识符的其他部分可以由字符(大小写)*,下划线或数字(0-9)组成。

无效的标识符例子有2things; this is a man; my-name

3.python编译过程--脚本解释型语言

在运行脚本之后,得到结果之前

1)python先将脚本编译成字节码(pyc,pyo)

脚本中只要import 函数,就会生成pyc文件

2)python虚拟机解释并运行字节码文件

C语言--编译型语言的内部机制

1)先将源代码编译成机器码,生成可执行文件

2)运行可执行文件

4,动态语义--在赋值时确定数据类型

例如 a=5 b=string, 那么用type(a)=int; type(b)=string

5. python之禅

进入python,输入import this 会看到

2017/8/14/周一

1. python一切数据皆为对象

包含了一系列的数据和操作这些数据的方法的一个整体,就叫作对象。

一切变量都是对数据对象的引用

python内部的引用计数,sys.getrefcount

import sys

a=‘hello‘

sys.getrefcount(‘hello‘)

输出为3---python中初始数为3

e=‘hello‘

sys.getrefcount(‘hello‘)

输出为4

a=1

sys.getrefcount(‘hello‘)

输出为3,说明引用被销毁一次。

2.数据类型的组成

组成3部分。

身份 id方法来看一看他的唯一标示符,内存地址靠这个哦!

类型 type来看一看。

值 数据项。

某书里的傲娇结论:python里一切都是指针,所以不用再考虑指针这个问题了!

3. 常用基本数据类型.

int 整型

boolean 布尔

a=True

b=False

注意:首字符必须大写

string  字符串

list 列表

tuple 元祖

dict 字典

4.数据类型的可变和不可变,意思就是如果变量的值改变后,id值是否改变

不可变类型:int,string,tuple

例如a = 5,看一下id值;然后a = 6, 再看一下id值,2个值是不同的

可变类型: list,dict

例如a = [1,2,3]

a.append(4),此时a=[1,2,3,4];但是改变前后,a的id值是不变的

5.变量之赋值一切皆为引用,动态性与动态类型之为何不再动态

如果给一个变量赋值后,它的数据类型就确定了,不能再随意改变;比如a="4",此时不能在进行a+1的运算,因为"4"和1不是一个数据类型,不能计算。如果想计算,需要先把字符串a转变为整型,方法就是int(a)+1.

字符串认知与应用

认知1.字符串概念

认知2.ascii unicode utf8到底是啥

一.len

len:全写是length,是计算容量的函数;例如a = "1234", len(a)=4

如果是中文字符,比如a = "哈", len(a)=3, 那么怎么显示正确的数目呢

方法一:在中文字符前加u    例如:a = u"哈" ,len(a)值为1

方法二:a ="哈哈"

g = a.decode(‘utf-8‘)

print len(g)值为2

方法二也可以直接写成 a = "哈哈".decode(‘utf-8‘)

其实最好是a.decode(‘utf-8‘)

注意:

就是在脚本中标明#coding=utf-8,len的值还是按ascii码来计算

比如

#coding=utf-8

d = "中文"

print len(d)

执行python test.py的值为6

二.转义符让文本更好处理

要转义的字符前面加个反斜杠

三.字符串前面跟着的小尾巴到底是什么东西

例如:print r"\n" 表示不进行转义,输出为\n

四.访问子字符串,序列来了。

成员有是有序排列的,可以通过下标偏移量访问到它的一个或者多个成员

a = "abcd"

print a[0]  第一个字符

print a[-1] 最后一个字符,也可以是print a[len(a)-1]

a[0: ] 输出为abcd

a[0:1] 输出为a

a[0:2] 输出为ab

a[1:3] 输出为bc 注意第一项不是0,那么输出项是从a[1]开始的3-1位,并不会输出a[3]

a[:-1] 输出为abc

五.替换字符串

a = "abc"

a.replace(‘a‘,‘hh‘)

‘hhbc‘

但是此时print a,输出还是abc

六.字符串拼接

1.直接用加号来拼接,太耗资源,超级丑陋之千万别用。

2.可选方案之字符串模板

用%s....%来拼接, %s表示要插入字符串,叫做占位符;%后面的字符表示要插入字符串的内容

占位符通常有2种,%s:字符串的占位符, %d:数字的占位符。

例如

1) print "my name is hong, %s" %  "i am 18"

2) print "my name is %s %s" % ("hong","ten years old")

3.优秀的拼接方案

>>> a = "a"

>>> b = "bcd"

>>> c = "12cd"

>>> "".join([a,b,c])

‘abcd12cd‘

#用[]把abc变成一个list,才能进行拼接,直接用join(a,b,c)报错,join里面的参数只有一个列表是似乎更容易理解,如下的例子

info = "abc"

a=list(info)

a[2]=‘d‘

info="".join(a)

很好的把list变成了string

如果想把三个字符串用逗号分隔,只需在双引号中写入,即",".join([a,b,c])

练习题

a = ‘jay‘

b = ‘python‘

用字符串拼接的方法输出:

my name is jay,i love python.

用方法二

>>> a=‘jay‘

>>> b=‘python‘

>>> print "my name is %s,i love %s" % ("a","b") #看来这里的a,b 不能加引号

my name is a,i love b

>>> print "my name is %s,i love %s" % (a,b)

my name is jay,i love python

七.读写文本来了

d = open(‘a.txt‘,‘w‘)

d.write(‘hi,\nhello‘)

d.close()

d = open(‘a.txt‘,‘r‘)

help(d)

print d.readline

hi

print d.readline

hello

如果想读取所有内容

print d.read(100),但是显示为空

d.seek(0)来调整一下读取位置

print d.read(100)就能看到全部信息量,100不够就1000

w write

r read

a append

2017/8/15 8:59

基本数据类型1.3

一:类型

1 不可变数据类型

string,int ,tuple 常量

字符串不可变之再探

string[1] = ‘new_one‘ can?

例如:

a = "test" print a[0]输出为t,此时若使a[0] = 1,就会报错

说明字符串不可变

下面使用list的方式,list为可变对象

a = [1,2,3,4]

print a[0]输出为1

a[0] = 4

print a[0]输出为4,说明更改成功。

2 可变数据类型变量

dict list

二. 再研究字符串

序列到底是什么

有先后顺序的排序,就是序列

字符串就是一个序列

1 三个符合的区别 ‘‘,"",""" """

python中单双引号没区别,单引号里可以写双引号,双引号里也可以写单引号

一对三个双引号作用是格式化的输出多行内容,而且里面的内容可以任意加单引号,双引号等。例如

print """

author

"date"

‘money‘

"""

2 偏移量从0开始

3 如何修改字符串之replace,find

a = "my name is hong"

a.replace("my","his"),输出为his name is hong.

但是这种方法并没有修改a的原值,a的输出还是my name is hong

如果想修改原值,可以重新赋值,比如

a = a.replace("my","his"),输出为his name is hong

find

a.find("hong") 如果找到了字符串"hong"会返回一个整型,这个数值是a字符串对象hong第一个字母"h"的下标  ,如果找不到"hong",会返回-1

如果有多个hong,怎么指定某一个hong呢,例如

a = "hong my name is hong"

此时用a.find("hong") 输出结果会是0,就是从第0个字符开始的就是hong,怎么找后面的那个hong呢

a.find("is") 输出为13

a.find("hong",13)就会输出is后面的hong了,注意用help(a.find)文档

三. 格式化细究

1. % 格式化方式

复习占位符 %s,%d

a = "this is a %s" % "apple"

a = "this is a %s %s" % (4,10) 还可以强制把整型转为字符串

输出为 this is a 4 10,小括号里的数据要按顺序写

2. format格式化方式

b = "this is {} {}" .format ("my","apple")为什么要用format

print b

输出为 this is my apple

如果想调整一下输出参数的顺序,那么可以这样写

b = "this is {1} {0} .format ("my","apple"),那么输出结果就是

this is apple my

需要注意的是参数从0开始

算参数位置太麻烦,有时候还出错,来种更人性化的方法

b = "this is {whose} {fruit}" .format (fruit="apple",whose="my")

print b

输出为this is my apple

3. 还有一个方法,字典来了。

a = "this is %(whose)s %(fruit)s" % {‘whose‘:‘my‘,‘fruit‘:‘apple‘}

其中whose:my, whose是key位,my是word位

四. 再议打开文件

a = open("test.txt","w") #如果权限够,会直接创建test.txt

a.write("hello, my name is hong")

#小括号内 只能写字符串,而且必须加引号,如果写1就会出错

a.close

标准库的介绍 linecache - Cache lines from files.

a = open("tmp.txt","w")

a.write("haha\n12faf\nhong")

a.close

在python命令行中输出上面tmp文件的第一行,第二行内容。

import linecache

help(linecache)

print linecache.getline("tmp.txt",1)

print linecache.getline("tmp.txt",2)

...

四. 列表

1.  有序的集合

a = [1,2,3]

2 通过偏移来索引,从而读取数据

a[-1]输出为3

3 支持嵌套

b = [[1,2,3],[4,5,6]]

b的输出为[[1,2,3],[4,5,6]]

此时如果想修改2为7,方法是b[0][1] = 7

4. 可变的类型

1) 切片:

a = [1,2,3,4,5,6,7]

正向索引

a[0:4:1] 表示从0位开始去到第4位,步长为1,结果为[1,2,3,4]

反向索引

a[-1:-4:-1],取到[7,6,5] #反向索引的步长一定要加上

默认索引

a[1:], 取到[2,3,4,5,6,7]

a[1::2], 取到[2,4,6]

2) 添加操作:

+ 生成一个新的列表

a = [1,2,3]

b = [4,5,6]

a + b 输出为[1,2,3,4,5,6]

Extend,扩展list,参数为其他列表名,结果是新元素自动融入list,类型一样。

接受参数并将该参数的每个元素都添加到原有的列表中,原地修改列表而不是新建列表

a.extend(b)

a的输出为[1,2,3,4,5,6],对比操作前后的id(a),值是不变的

Append :添加任意对象到列表的末端,参数为单个元素,这个元素可以是数字,也可以是list或者元组本身。

a = [1,2,3]

a.append(4)

a的输出为[1,2,3,4]

还可以加入列表

a.append([3,4,5])

a的输出为[1,2,3,4,[3,4,5]]

Insert: 插入任意对象到列表中,可以控制插入位置。

a.insert(1,"ab") 表示在下标为1处加上元素“ab”

a的输出结果是[1,"ab",2,3,4,[3,4,5]]

3) 修改:

修改列表本身只需要直接赋值操作就行。

A = [1,2,3]

A[0]=’haha’

4) 删除操作:

Del :我们通过索引删除指定位置的元素。

a = [1,2,3,4,5]

del a[0] #只有del是用命令del,其他都是通过 a.函数名 的方式调用实现相应功能。

a输出为[2,3,4,5]

Remove:移除列表中指定值的第一个匹配值。如果没找到的话,会抛异常。

a.remove(4)

a.remove(6)

Pop:返回最后一个元素,并从list中删除它。

a.pop()

输出为5,并删除5

5. 成员关系:

通过in, not in的方法,我们可以判断一个元素是否在列表里。返回一个bool类型,元素在列表里返回true,否则返回fasle.

a = [1,2,3]

2 in a

True

5 in a

False

5 not in a

True

6. 列表推导式:

[expr for iter_var in iterable]

1)首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。

比如我们要生成一个包含1到10的列表

方法一

[x for x in range(1,11)]

输出为[1,2,3,4,5,6,7,8,9,10]

方法二

Range(1,11)

方法三

[expr for iter_var in iterable if cond_expr]

2)加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。

要生成包含1到10的所有奇数列表。

方法一

range(1,11,2)

方法二

[x for x in range(1,11) if x % 2 == 1]

7.  排序翻转:sort,reverse

sort

这个方式会直接修改原列表,它的返回值为none,所以b = a.sort()  ,print b 输出的内容是None

例如

a = [33,11,22,44]

b = a.sort()

b的输出结果为None,也就是什么都不输出,可以用if语句判断

if b is None:

print "haha"

此时再输出a,发现a已经按顺序排好,输出为[11,22,33,44]

reverse和sort同理

b = a.reverse() #b的输出也是None

再看a的输出,发现a的值已经反转了

[44,33,22,11]

2017/8/16

基础篇10-列表应用

1. 内置list的方法

a = "asd"

list(a)

[‘a‘,‘s‘,‘d‘]

返回一个列表,参数是可迭代对象。里面输出的内容保持了传入的可迭代对象的元素和顺序

再传一个元组

list((1,2))

[1,2]

但是如果传入数字,就会报错,因为数字是不可迭代的对象

list(10)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: ‘int‘ object is not iterable

2.xrange和range的区别

xrange(开始,结束,步长)步长省略的话,默认为1

2个函数的区别:

xrange 会生成一个xrange对象,

range直接生成一个列表对象

例如

>>> a = xrange(1,10)

>>> a

xrange(1, 10)

>>> a[0]

1

>>> a[3]

4

>>> b = range(1,10)

>>> b

[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> b[0]

1

>>> b[3]

4

xrange的使用场合

1. 当我们需要操作一个非常大的数据,而且内存比较吃紧的时候,我们可以用xrange来操作省内存

2. xrange一般用在循环里面,比如我们只需要操作部分数据,而不是返回全部元素来完成操作,推荐使用xrange

比如

for m in range(1000):    #生成一个包含[0-999]的对象

if m == 10:

print "sss"

break

for m in xrange(1000): #每一个迭代循环,只返回一个元素,只需返回[0-10],11个对象

if m == 10:

print "sss"

break

3. 列表推导式之再应用

例子1,取出1-100的所有值的平方

按从右向左的顺序来写,比较人性化,先写一个1-100的序列,让x迭代,然后左边写运算,最后加一个中括号

[x*x for x in range(100)]

里面生成东西而不是数字

生成字符串

["the %s" %d for d in xrange(10)]

输出为 ["the 0","the 1","the 2","the 3",...."the 9"]

生成元组

for x in range(2)  先生成一个列表,进行迭代

for y in range(2)  再生成一个列表,进行迭代

定义一个元组(x,y)

定义列表,也就是加上中括号

完整的句子就是:

[(x,y) for x in range(2) for y in range(2)]

输出如下

[(0,0),(0,1),(1,0),(1,1)]

生成字典,就是上面的一个打包操作,加上dict()

dict([(x,y) for x in range(2) for y in range(2)])

输出如下

{0:1,1:1}

冒号左为key,右为value, key如果相同,后面的key会覆盖前面的key,所有(0,0),(0,1)只会有0:1, 1:1道理一样。

4. 翻来覆去之再谈引用

a = ["i","am","lilei"]

b = a #此时查看列表对象的地址,用id()查看,发现a,b的id值是一样的,也就是引用的列表对象的存储位置是一样的。

a[2] = "laowang"

print b

这里b的值是什么?

b的值为[‘i‘,‘am‘,‘laowang‘]

del b

a

这里的a是什么值

a的值还是[‘i‘,‘am‘,‘laowang‘]

5. 小技巧之再议删除

1)del a 删除列表对象的引用

>>> a = [1,2,3]

>>> b = a

>>> del a

>>> b

[1, 2, 3]

2)del c[:] 清空列表对象里的元素

>>> c = b

>>> del c[:]

>>> c

[]

>>> b

[]

习题

[]是引用 传址调用

[:] 是复制 传值调用

a = [1,2,3]

b = a[:] #这个[:]是个什么东西

del a

b的值是什么。为什么呢?

当b=a时

>>> a=[1,2,3]

>>> b=a

>>> a

[1, 2, 3]

>>> b

[1, 2, 3]

>>> id(a)

140076707413024

>>> id(b)

140076707413024

当b=a[:]时

#这里生成了一个新的列表对象,b的变化,不会影响下面a的输出。

>>> a=[1,2,3]

>>> b=a[:]

>>> a

[1, 2, 3]

>>> b

[1, 2, 3]

>>> id(a)

140076707334048

>>> id(b)

140076707335272

>>> b=[1,2,3,4]

>>> a

[1, 2, 3]

>>> b

[1, 2, 3, 4]

2017/8/17 8:52

基础篇11-元组和集合

1. 元组是有序的集合

a = (1,2,3)

2. 通过偏移来取数据,也是通过下标来取,和列表一样。区别就是list是可变的,元组是不可变的。

a[0] 输出为1

a[1:3] 输出为(2,3)

3. 属于不可变的对象,不能在原地修改内容,没有排序,修改等操作。

dir(a)可以看到所有支持的方法

要想修改元组,需要先把元组重新赋值给一个列表,然后修改列表元素,之后再把列表转变给元组。方法如下

b = list(a)

b[0] = 5

type(b) 输出为list

a = tuple(b) #生成了一个新的元组对象

a

输出为(5,2,3)

tuple类型转换

那为什么有列表还要有元组呢?

元组不可变的好处。保证数据的安全,比如我们传给一个不熟悉的方法或者数据接口,确保方法或者接口不会改变我们的数据从而导致程序问题。

例子1

#encoding=utf-8

def info(a):

print "id %d" % id(a)

#a[0] = "haha"  第一个脚本完成后加这行进行测试

#return a 这行也是测试的

a = [1,2,3]

print "start-"

print id(a)

info(a)

#print a  测试用的

另外一种方法

#encoding=utf-8

def info(a):

b = a[:]  #这里生成了一个新的列表对象,b的变化,不会影响下面a的输出。

b[0] = "haha"

return a

a = [1,2,3]

print "start-"

print id(a)

info(a)

print a

二. 集合

集合是没有顺序的概念。所以不能用切片和索引操作。

1. 创建集合

set():可变的

a = set("abc")

a

输出为set([‘a‘, ‘c‘, ‘b‘])

不可变的frozenset():

>>> a = frozenset("abc")

>>> a

frozenset([‘a‘, ‘c‘, ‘b‘])

>>> a.add("222")

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘frozenset‘ object has no attribute ‘add‘

>>> a.remove("a")

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘frozenset‘ object has no attribute ‘remove‘

查看对象是否可迭代的方法

用dir进行查看,比如dir(a),如果输出中有"_iter_",说明可以进行迭代。

2. 添加操作: add,update

add函数

a.add("python")

a

输出为

set([‘a‘, ‘python‘, ‘c‘, ‘b‘])  #"python"做为一个整体来加入。

update函数

>>> b = set("hong")

>>> b

set([‘h‘, ‘g‘, ‘o‘, ‘n‘])

>>> b.update("python")

>>> b

set([‘g‘, ‘h‘, ‘o‘, ‘n‘, ‘p‘, ‘t‘, ‘y‘]) #python分开来插入,如果重复自动忽略

注意:

update的参数也可以是list,如果使用list,那么集合中新加的元素还会保持原先list中的顺序。

比如c=‘hong‘

b.update(list(c))

3. 删除 remove

a.remove("python")

a

输出为

set([‘a‘, ‘c‘, ‘b‘])

4. 成员关系 in,not in

"c" in a

True

"h" not in a

True

5. 交集,并集,差集 & | -

a = set(‘abcd‘)

b = set(‘bcdef‘)

a & b

set([‘c‘,‘b‘,‘d‘])

a | b #并集

set([‘a‘,‘c‘,‘b‘,‘e‘,‘d‘,‘f‘])

a - b #差集

set([‘a‘])

6. set去重

例子

>>> a = [1,2,3]

>>> a.append(1)

>>> a.append(3)

>>> a

[1, 2, 3, 1, 3]

>>> set(a)

set([1, 2, 3])

>>> list(set(a))

[1, 2, 3]

基础篇12-字典

字典是无序的,它不能通过偏移来存取,只能通过键来存取。

例1

>>> info = {‘a‘:1,‘b‘:2}

>>> info

{‘a‘: 1, ‘b‘: 2}

可以通过键值返回value值

>>> info[‘a‘]

1

例2

>>> binfo = {‘a‘:[1,2,3],‘b‘:[4,5,6]}

>>> binfo

{‘a‘: [1, 2, 3], ‘b‘: [4, 5, 6]}

>>> binfo[‘a‘][2] = 5

>>> binfo

{‘a‘: [1, 2, 5], ‘b‘: [4, 5, 6]}  #说明字典是可变的类型。

字典 = {‘key‘:value} key:类似我们现实的钥匙,而value则是锁。一个钥匙开一个锁

特点:

内部没有顺序,通过键来读取内容,

可嵌套,方便我们组织多种数据结构,并且可以原地修改里面的内容,属于可变类型。

组成字典的键必须是不可变的数据类型,比如,数字,字符串,元组等,列表等可变对象不能作为键.

例3

key 为数字

>>> binfo = {1:"22",2:"dd"}

>>> binfo

{1: ‘22‘, 2: ‘dd‘}

key为字符串

>>> cinfo = {"a":"222","b":111}

>>> cinfo

{‘a‘: ‘222‘, ‘b‘: 111}

key为元组,需要注意的是元组中的元素也必须是不可变类型。

>>> dinfo = {(1,2,3):‘ss‘,(‘b‘,‘c‘):‘222‘}

>>> dinfo

{(‘b‘, ‘c‘): ‘222‘, (1, 2, 3): ‘ss‘}

元组中的元素是列表

>>> xinfo = {(1,‘2‘,[2,3]):‘a‘}

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: unhashable type: ‘list‘

key为列表

>>> finfo = {[1,2,3]:‘sss‘}

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: unhashable type: ‘list‘

1. 创建字典。{},dict()

法1

info = {‘name‘:‘lilei‘, ‘age‘: 20}---------------一般情况下还是用法一好!

法2

info  = dict(name=‘lilei‘,age=20)

name是key,‘lilei‘是value

注意:

1. 法一是用花括号,法二是用小括号;

2. 法一key和value中的字符串必须加引号;法二key的字符串可以不用加双引号,value的字符串必须加双引号。

3. 法一用冒号,法二用等号

2. 添加内容 a[‘xx‘] = ‘xx‘

比如在法1例子的基础上加上如下命令

info[‘phone‘] = ‘iphone5‘,其中phone为key, iphone5为value

>>> info ={‘name‘:‘lilei‘,‘age‘:20}

>>> info

{‘age‘: 20, ‘name‘: ‘lilei‘}

>>> info[‘phone‘] = ‘iphone5‘

>>> info

{‘phone‘: ‘iphone5‘, ‘age‘: 20, ‘name‘: ‘lilei‘}

3. 修改内容 a[‘xx‘] = ‘xx‘

info[‘phone‘] = ‘htc‘

update 参数是一个字典的类型,他会覆盖相同键的值

在例2的基础上做下面操作

>>> info.update({‘city‘:‘beijing‘,‘phone‘:‘nokia‘})

>>> info

{‘phone‘: ‘nokia‘, ‘age‘: 20, ‘name‘: ‘lilei‘, ‘city‘: ‘beijing‘}

4. 删除 del,clear,pop

1)del ainfo[‘phone‘] 删除某个元素

>>> ainfo = {‘age‘:22,‘aa‘:22}

>>> ainfo

{‘aa‘: 22, ‘age‘: 22}

>>> del ainfo[‘aa‘] #删除‘aa‘元素

>>> ainfo

{‘age‘: 22}

删除ainfo的引用

>>> del ainfo

>>> ainfo

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

NameError: name ‘ainfo‘ is not defined

2)clear()删除字典的全部元素

>>> a = {‘info‘:‘22‘,‘age‘:‘34‘}

>>> a

{‘info‘: ‘22‘, ‘age‘: ‘34‘}

>>> a.clear()

>>> a

{}

3)pop(‘name‘)

字典的pop方法

>>> a = {‘11‘:‘aa‘,‘bb‘:22}

>>> a

{‘11‘: ‘aa‘, ‘bb‘: 22}

>>> a.pop(‘bb‘) #传入需要删除目标的key,就可删除。

22

>>> a

{‘11‘: ‘aa‘}

需要注意的是,如果pop的key不存在,我们可以指定一个输出值让系统显示出来,

以上面字典a为例

>>> a.pop(‘33‘)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

KeyError: ‘33‘

>>> a.pop(‘33‘,‘not exist‘)

‘not exist‘

列表的pop方法

>>> binfo = []

>>> binfo.append(‘22‘)

>>> binfo.append(‘234‘)

>>> binfo

[‘22‘, ‘234‘]

>>> binfo.pop(0) #传的是索引下标

‘22‘

>>> binfo

[‘234‘]

5. in 和 has_key() 成员关系操作

例如

>>> a

{‘11‘: ‘aa‘, ‘bb‘: 22}

1).in

>>> "phone" in a

False

2) a.has_key()

>>> a.has_key(‘11‘)

True

>>> a.has_key(‘aa‘)

False

3). keys(): 返回的是列表,里面包含了字典的所有键

>>> a.keys()

[‘11‘, ‘bb‘]

4). values():返回的是列表,里面包含了字典的所有值

>>> a.values()

[‘aa‘, 22]

5) items():生成一个字典的容器:------这个方法是字典转变为list的途径

>>> a.items()

[(‘11‘, ‘aa‘), (‘bb‘, 22)].里面的每一项都是一个元组,元组第一项为key,第

二项为value

6) get:从字典中获得一个值

>>> a.get(‘11‘) #参数为key,输出为value

‘aa‘

>>> a.get(‘33‘) #key不存在,输出为空,且为NoneType类型

>>> b = a.get(‘33‘)

>>> type(b)

<type ‘NoneType‘>

>>> a.get(‘33‘,‘not exist‘) #key不存在,可以指定默认输出值

‘not exist‘

基础篇13-答疑课

aa = [(2*(x/2)>>0,2*(x%2)) for x in xrange(4)]    ##这里不明白

print [((x>>1)<<1,(x & 1)<<1) for x in xrange(4)] ##这里不明白

一. 先得讲讲二进制

0 + 1 + 1 9 +1  = 10

99 +1 = 100

2进制冯二进1

0 +1 = 1

1 +1 = 10

10 +1 = 11

11 +1 =  100

100 + 1 = 101

101 + 1 = 110

二. 难缠符号来啦

bin:把10进制转换为2进制

例子

>>> bin(3)

‘0b11‘

只看0b后面的数值,就是转换后的2进制

1.难缠符号之一 >> <<

位移,移动的是2进制的位

例子

>>> 5 >> 1

2

5的2进制是101,向右边移动一位,结果就是10,十进制结果就是2

>>> 3 << 1

6

3的二进制是11,左移一位变为110,十进制就是6

2.难缠符号之二 &

按位与,对应位都是1结果才是1,其他都是0

1100

1000

1000

例子

>>> 10 & 20

0

10的2进制:01010   #第一位的0是补的

20的2进制:10100

发现没有一个对应位是1的,所有结果是全0.

>>> 40 & 32

32

注意2进制转变为10进制

>>> int(0b100000)

32

3.难缠符号之三  |

按位或,对应位只需一个为1,结果就是1

0100000

1100100

1100100

例子

32 | 100

100

4.难缠符号之四  ^

按位异或,对位相加,不进位

101

011

110

5.难缠符号之五 ~

按位取反,2进制数加1后,乘以-1

例如~5 = -6

~5=-(101+1)=-110=-6

所以

3+~5=-3

注意不能直接写3~5,这样是错的

三. 其他

1.&之奇偶判定,和1进行按位与运算,结果为1就是奇数,结果为0则是偶数

5 & 1

1

4 & 1

0

2.计算硬盘容量

比如一个文件大小是11866字节,想知道有多少k,那就是向右移10位,相当于11866除以2的10次方,相应的,想知道有多少M,就向右边移动20位。

11866 >> 10

3.真真假假不知晓

False & True & True

False

True & True & True

True

if is_boy() & is_18() & is_chinese():

print

四.回过头来再看这道题

aa = [(2*(x/2)>>0,2*(x%2)) for x in xrange(4)]    ##这里不明白

print [((x>>1)<<1,(x & 1)<<1) for x in xrange(4)] ##这里不明白

2017/8/18 9:57

基础篇15. 答疑课之二:再议数据结构与数据类型

1.list,dict,tuple之它们其实是好基友

1.1 没有最优秀的数据结构,只有最适用的

1.2 了解每个结构的特点才能活学活用

1.3 它们相互转换如此简单

list是有序的

dict是无序的,适合存储有复杂名称的数据,比如{"xiaoming":86},比如电话薄,班级成绩单。

a = (1,2,3,4)

a = list(a) #元组转换成list

然后把list转变成tuple

a = tuple(a)

list转换成字典

a = [(1,3),(2,4)]

a = dict(a)

2.“推倒式”(列表推导)与再议

[x for x in xrange[101]

第一部分 []

第二部分 x

第三部分 for x in xrange[101]

等价于

new_list = []

for x in xrange(101):

new_list.append(x) #这里的x等同于第二部分的x

print new_list

3.排序

3.1 sorted--------可以用在字符串中进行排序,会生成一个list

help(‘sorted‘)来看帮助文档

a = [1,2,3,4]

sorted(a,reverse=True)

[4,3,2,1]

a

[1,2,3,4] #说明sorted并不是原地修改

要想修改a的值,需要赋值

a = sorted(a,reverse=True)

3.2 list之sort方法

a = [1,2,3,4]

a.sort(reverse=True)

a

[4,3,2,1] 说明内置函数sort是原地修改

sort帮助文档中的信息

L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;

cmp(x, y) -> -1, 0, 1

key最好用,它可以对list中的元素进行操作

例1

>>> a = ["43214","324214","82310","9231"]

>>> a.sort(key=int)

>>> a

[‘9231‘, ‘43214‘, ‘82310‘, ‘324214‘]

>>> a.sort(key=int,reverse=True)

>>> a

[‘324214‘, ‘82310‘, ‘43214‘, ‘9231‘]

例子2,按照list中元组元素的第2个数字大小进行排序

>>> a = [(‘a‘,2),(‘b‘,5),(‘c‘,4)]

>>> a.sort(key=lambda x:x[1]) #x表示每一个元组单元,x[1]表示元组中下标为1的元素,也就是数字2,5,4.

>>> a

[(‘a‘, 2), (‘c‘, 4), (‘b‘, 5)]

>>> a.sort(key=lambda x:x[1],reverse=True)

>>> a

[(‘b‘, 5), (‘c‘, 4), (‘a‘, 2)]

cmp是什么

cmp是用来比较2个数字的值,只会返回三个结果:0,1,-1.    能用key最好不用cmp,python3中已经弃用,性能不好

用法

cmp(a,b) 等同于公式(a>b) - (a<b)

>>> cmp(1,3)

-1

>>> (1>3) - (1<3)

-1

>>> cmp (3,1)

1

>>> cmp (3,3)

0

3.3 多级排序咋个办

如下,按元组元素中的后两位数字进行排序,我的理解就是后两位看做一个数比大小。

>>> a = [(3,1,2),(6,7,8),(6,5,9)]

>>> import operator

>>> a.sort(key=operator.itemgetter(1,2)) #这里的1,2表示下标。

>>> a

[(3, 1, 2), (6, 5, 9), (6, 7, 8)]

3.4 字典如何去排序

自己摸索。。。

4.字符串模板应用

4.1 回忆一下,字符串模板有哪几种方式

"%s is a %s" %("he","boy")

"%(who)s is a %(gender)s" %{"who":"he","gender":"boy"}

"{who} is a {gender}".format(who="he",gender="boy") 这种最好

4.2 典型应用1:html模板

也是用占位符来替代相应模块中的内容

4.3 针对性比强大更为重要

三种字符串模板灵活运用,看哪个适用

基础篇16-python语句讲解1

1. print语句

1.1 基本输出

1.2 print的逗号

1.2 输出到文件 >>为重定向

解释与例子

在python脚本中,如果写入

print "2"

print "3"

那么执行的时候会自动进行换行,输出为

2

3

如果脚本中加上逗号,如下

print "2",

print "3"

那么执行的时候输出就是

2 3

不会进行换行,所有逗号的意思就是print语句还没执行完。

输出重定向,使用print命令来写文件内容  -----以后我就用这个方法吧,命令行也行

脚本中如下写

f = open(‘print.txt‘,‘w‘)

#一般情况下写入文件应该用命令f.write("my name is hong"),这里用print来写

print >> f,"my name is hong"

print >> f,"i am from china"

f.close()

这里当然也可以用逗号,来使2行变一行。

2. 控制流语句(control flow)

2.1 由条件和执行代码块组成。

2.1.1 条件可分为决策、循环和分支

2.2 格式(冒号与4个空格永不忘)

2.3 if,while,for 函数,皆为contorl flow

解释和例子

if True:  #冒号分隔了条件和代码块。

print 4 #4个空格缩进的代码块

x = 3

if x: #相当于 if x == if bool(x),返回结果为True

print 4

3. 布尔值

3.1 控制流与真假值息息相关

3.1.1 不要误解了真假与布尔值

3.2 布尔值的几个最基本运算符

3.2.1 and 全部都为bool真

3.2.2 or 至少一个为bool真

3.2.3 is 检查共享

3.2.4 == 检查值

3.2.5 not

3.2.6 其他若干比较符号

>>> True and False

False

>>> True or False

True

is是检查是否引用了同一个数据对象

>>> 5 is True

False

5是引用了一个整型的数据对象,True引用的是一个布尔类型的对象,所有结果是False

>>> a = 5

>>> b = 5

>>> a is b

True

== 检查左边和右边的值是否相同

1 == True

True

虽然左边是整型,右边是布尔型,但是他们的值都是1,所以返回True

>>> 4 == 9

False

not:取反。如果要表示真,后面一定要跟False,做这个的是太无聊了,整点花样。

if not False:

print "not False"

4. if语句 (控制流语句)

4.1 if的组成 if else elif pass

4.1.1 if与elif替代了switch

4.1.2 pass

例子

if True:

print "True"

else:

print "False"

if True:

print "True"

elif not True:

print "not True"

else:

pass #什么都不做

4.2 奇技淫巧 三元表达式

4.2.1 x if  else

4.2.2 活用list

4.2.3 三元表达式玩玩就好

例子1

4 if True else 3

等同于

if True:

print 4

else:

print 3

>>> 4 if True else 3

4

例子2

>>> [4,3][True] #True值为1,所以返回下标为1的list值

3

>>> [4,3][False] #False值为0,所以返回下标为0的list值

4

>>> [4,3][0]

4

>>> [4,3][1]

3

基础篇17-python语句讲解-2

1.复习

1.1 控制流的基本组成部分 条件,执行代码块。

1.2 if的基本格式

if expression:

statement(s)

1.2 控制流的条件表达式(expression)结果,必须为True(真),比如 条件可以写成if not True: 这样的返回结果为真,而不能写成if False,返回为假

1.3 冒号永不忘。尽量使用4个空格,而不是制表符

2.while语句

2.1 while的基本格式

while expression:

statement(s)

例子1

x = 1

while True:

x += 1

print x

#continue 通过加减这个命令来测试

if x > 20:

break

else:

2.2 while的基本组成部分

2.2.1 break 结束while

2.2.2 continue 跳出当前这次循环,但不结束while

2.2.3 else 结束while以后执行,是正常跑完,不是通过break强行结束。也就是说不能和break连用,不然break会把else语句也掐断。但是可以和continue一起用

while x < 20:  #可以在while表达式中用<

x += 1

#continue  来测试是否能和continue一起用

print x

else:

print "end"

2.3 注意:普通应用里,while一定要给一个结束条件,否则就是传说中的死循环

3.for语句

3.1 for的基本格式

for item in iterable:

statement(s)

例子

for x in "hello,my name is hongjin"

print x

消除空格

for x in "hello,my name is hongjin".split(" "):

print x

用一行来显示出来文本内容

for x in "hello,my name is hongjin".split(" "):

print x,

3.2 for的基本组成部分

3.2.1 break

3.2.2 continue

3.2.3 else

3.3 注意:for的最后一个迭代值将保留,也就是循环结束后,最后一个循环取得值将被保留在内存中。如果不注意的话,可能会出现错误

4.布尔值再议

4.1 惰性求值,需要时再求值。

4.2 从左到右,从先到后。

4.3 利用小技巧。or之默认值。

比如

True and False and False and True

python在进行计算时,看到第二个是False,后面的就不计算了,直接返回False

在进行运算时,可以把可能是false的计算放在前面,把其他运算量很大的计算放后面,这样效率高

or之默认值

比如在爬网页的时候

http://reg.email.163.com&from=126mail

定义一个变量

from_url = url.get("from") or None

就是爬上面的网址from后面的参数"=126mail",有时候from后面有内容,有时候没有,如果没有的话,脚本还想继续运行,就需要加上or None

基础篇18-语句与数据结构应用

1.最基本的迭代

a = "abcdefg"

for i in a:

print i

b = [1,2,3,4,5]

for i in b:

print i

2.如何迭代字典

a = {"key":"value","key1":"value1"}

print a

a = {"key":"value","key1":"value1","key1":"value2"}

print a

相同的key,只会输出最后一个key的value

for i in a.keys():

print i

命令行中看一下a.items()是什么

脚本中

for x,y in a.items():

print x,y

3.如何为字典排序

例子1,把下面字典元素按照key中的字母序列排序

a = {"a":"haha","b":"xs","d":"fa","c":"faff"}

key_list = a.keys()

key_list.sort()

#print key_list

for x in key_list:

print x,a[x]

注意:字典可以使用如下方式查看字典的value

>>> print a["a"]

haha

4.字典根据键值查找键

那么如果想从字典的value得到key,应该怎么做呢

分析:

1) 字典索引的是键,而不是值 => 迭代,穷举

2) 字典具有唯一键,但值不要求唯一

3) 一个值可能对应多个键

例子,不同的key都有相同的value值,

a = {"a":"haha","b":"xixi","d":"haha","e":"xixixi","c":"haha"}

search_value = "haha"

key_list = []

for x,y in a.items(): #找到所有的key, value, for x,y :设置两个参数,这个思想很牛x

# print x,y

if y == search_value: #建立相同value对应的key_list

key_list.append(x)

print key_list

5.sorted排序方法再议

在python脚本中这样写

import string #测试下不引入string时的输出情况。

a = "dcDSfag1f43"

a = ‘‘.join([x for x in a if not x.isdigit()])

print sorted(a,key=string.upper)

执行后输出为

[email protected]:~$ python test.py

[‘a‘, ‘c‘, ‘d‘, ‘D‘, ‘f‘, ‘f‘, ‘g‘, ‘S‘]

注意:

key=string.upper可以理解为

1.用string.upper这个方法,去执行列表中的每一个数据,假设我们有一个list

c = [a,b,c]

sorted(c,key=string.upper)相当于先生成一个新的列表

c = [string.upper(a),string.upper(b),string.upper(c)],然后对这个新的列表进行排序。

结论:

[x for x in a if not x.isdigt()] 等价于下面代码

new_list = []

for x in a:

if not x.isdigit():

new_list.append(x)

6. 好玩的translate与maketrans---替换字符

例子1

>>> import string

>>> g = string.maketrans(‘123‘,‘abc‘) #建立翻译表,参数中的‘123‘和‘abc‘位数必须一致,因为它是一一对应翻译的,否则会报错

>>> a = ‘123456‘

>>> print a.translate(g)

abc456

例子2

>>> a = ‘321123132‘

>>> print a.translate(g)

cbaabcacb

对比replace

>>> a.replace(‘123‘,‘abc‘)

‘321abc132‘

例子3,删除操作

>>> a = ‘321123132‘

>>> a.translate(g,‘1‘) #输出删除1后对应的翻译

‘cbbccb‘

如果不翻译,输出删除1后的结果

>>> c = string.maketrans(‘‘,‘‘)

>>> a.translate(c,‘1‘)

‘322332‘

>>> a.translate(c,‘12‘)

‘333‘

逐个删除。

7. 一个新的语句,with,一个写文件的方法

普通方法

g = open(‘a.txt‘,‘w‘)

g.write(‘hello,\nhi‘)

g.close()

with方法

with open(‘a.txt‘,‘a‘) as g: #参数a表示append

g.write("hello")

这种方法不需要写close语句

2017/8/20 8:58

基础篇20-python函数

一. 定义函数

1. def是关键字,括号冒号永不忘,执行代码块要缩进

2. 没有return的函数,不是真函数

3. 不写doc的函数,就像没有性别的人类,也就是要在函数中写说明,直接在def test():下一行用双引号写下说明就行了

例子1

def test():

print 4

test()

上面这个写法是错误的,应该如下写

def test():

return 4

print test()

例子2

#coding=utf-8

def test():

"这是一个测试函数"

return 1

print test.__doc__

#这个命令是直接打出函数说明信息的,也就是执行python test.py时,会输出"这是一个测试函数", 需要注意的是doc前面和后面是2个下划线。

二. 函数的参数

1) 位置参数

def test(a,b,c,d):

return a,b,c,d #这样的结果是会返回一个元组(1,2,3,4)

print test(1,2,3,4) #定义的时候有几个位置参数,这里就要写几个数,否则会报错

2)可选参数,直白意思就是调用函数的时候参数写不写都行,不会报错。

def test1(a=4)

return a

print test1()

输出结果是4

print test1(5)

输出结果是5

3)可选参数可以当做默认值进行设置

例子, 下面是伪代码,知道意思就好

def test2(a,b,c return_data="json"):

if return_data == ‘json‘:

return json(a,b,c)

elif return_data == ‘xml‘:

return xml(a,b,c)

return a,b,c

test2(1,2,3,return_data=‘xml)

2.  参数的值是局部变量

1)全局变量和局部变量

例1,在脚本中如下写

b = 3  #全局变量

def a():

#global b

b = 4 #局部变量

return b

def c():

return b

print a()

print c()

结果输出为

4

3

说明在局部变量和全局变量中都定义一个变量的时候,会优先使用局部变量的值,如果局部变量没有定义,则会自动使用全局变量值

如果想在函数a中修改全局变量b的值,方法是使用global b,那么此时print c()的值也是4了,说明全局变量修改成功,这个方法慎用。

2)如何修改参数

例子

有一个list b = [1,2,3],想通过一个函数func(b),实现结果为把list b =[1,2,3,4], 方法如下

b = [1,2,3]

def func(x) #定义函数有一个参数

x.append(4)

return x

b = func(b)

#调用函数func,并且把返回值重新赋值给b,虽然不用赋值给b,结果也是正确的,但这不是一个好的编程习惯。

print b

3) 函数的参数魔法  -----   **和*   星星是字典,星是元组

例子1

def test(**kr):

return kr  #kr可以是任意字符,表示字典名

print test(a=4,c=3)

输出结果为{‘a‘:4, ‘c‘:3}

例子2

def test(*z):

return z

print test(1,2,[1,2])

输出结果为(1,2,[1,2])

例子3

def test(*z,**kr):

return z,kr

print test(1,2,a=5,b=9)

输出结果为 ((1, 2), {‘a‘: 5, ‘b‘: 9})

注意:

参数a=5这样的参数必须是一起写在1,2这样的参数后面。修改test(*z,**kr)的参数位置也不行。

例子4

def test(a,b,*z,**kr)

return z,kr

print test(1,2,4,5,c=4,d=9)

如果定义参数的时候,已经有了位置参数,那么在print test写入实参的时候是按照形参的顺序来写入的

实参中的c,d在定义中必须是没有c,d的,不然就会报错。

原文地址:https://www.cnblogs.com/regit/p/8514674.html

时间: 2024-08-28 17:58:37

python基础知识点的相关文章

Python 基础知识点总结

本篇基于Python 2.7.9 根据廖雪峰Python教程整理 URL:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 安装及IDE 上Python官网下载安装包. 配置环境变量:C:\Python27. cmd中输入 python 出现信息则为安装正确. IDE推荐集成在Eclipse上的pydev,eclipse插件安装路径:http://pydev.org/updates

python 基础知识点

Python介绍及发展史 Python 2 or 3 区别 安装和第一个Hello World程序 变量 用户交互 模块初识 .pyc文件是什么? 数据类型初识 数据运算 表达式if......else语句 表达式for循环 break and continue区别及用法 表达式while循环 入门知识拾遗 列表.元组操作 字符串操作 字典操作 文件操作 字符编码与转码 函数的基本语法及特性 参数与局部变量 返回值 嵌套函数 递归 匿名函数 函数式编程介绍 高阶函数 内置函数 迭代器&生成器 装

Python基础知识点整理1

变量 = 数据 ,Python将数据赋值给变量,通过变量间的运算实现数据处理. Python是一种弱类型语言,不需要声明变量,也不需要指定类型! 关于Python的变量: 对一个变量A赋值为1,那么变量类型为整数:再次赋值为2.1,则变量类型变为浮点型.变量的类型是由赋值给它的数据决定的,这种特殊的实现是由于Python特有的变量回收机制决定的. Python变量回收机制: 对一个变量赋值,变量指向赋值的那个数所在的内存地址:当赋值改变时,变量的地址发生变化,在一段时间内,原来的数据没有变量引用

Python基础—知识点拾遗

一.字符串格式化进阶 Python的字符串格式化有两种方式: 百分号方式.format方式,由于百分号的方式相对来说比较老,在社区里讨论format方式有望取代百分号方式,下面我们分别介绍一下这两种方式: 1.百分号方式 用法:%[(name)][flags][width].[precision]typecode (name):可选,用于选择指定的key flags:可选,可提供选择的值有 1 2 3 4  +          #右对齐;正数前加正号,负数前加负号  -          #左

python 基础知识点整理 和详细应用

Python教程 Python是一种简单易学,功能强大的编程语言.它包含了高效的高级数据结构和简单而有效的方法,面向对象编程.Python优雅的语法,动态类型,以及它天然的解释能力,使其成为理想的语言,脚本和应用程序高速开发在大多数平台上的很多领域. Python解释器及其扩展标准库的源代码和编译版本号能够从Python的Web网站,http://www.python.org/全部主要平台可自由查看,而且能够自由公布.该网站上也包括了分配和指针到非常多免费的第三方Python模块,程序,工具,以

python 基础知识点整理 和具体应用

Python教程 Python是一种简单易学,功能强大的编程语言.它包括了高效的高级数据结构和简单而有效的方法,面向对象编程.Python优雅的语法,动态类型,以及它天然的解释能力,使其成为理想的语言,脚本和应用程序快速开发在大多数平台上的许多领域. Python解释器及其扩展标准库的源码和编译版本可以从Python的Web站点,http://www.python.org/所有主要平台可自由查看,并且可以自由发布.该站点上也包含了分配和指针到很多免费的第三方Python模块,程序,工具,以及附加

总结(6)--- python基础知识点小结(细全)

=========================================================================================================================================== 基础: 一.列表======================================================================================================

python基础知识点理解(二)

闭包: 闭包有两个关键点:自由变量和函数 一个闭包就是我们调用了函数A,函数A返回了一个函数应用了A传入的参数B,函数B就是一个闭包,它使用的A传入的参数就是自由变量, 这就意味着在函数A的生命周期结束以后,他传入的参数仍然能够被B使用,因为他被闭包函数调用了,所以就不会被回收. EG: 1 def func(name): 2 def inner_func(age): 3 print 'name:', name, 'age:', age 4 return inner_func 5 6 bb =

Python基础知识点:类型和运算

一:类型和运算 –1.1 寻求帮助: dir(obj) # 简单的列出对象obj所包含的方法名称,返回一个字符串列表 help(obj.func) # 查询obj.func的具体介绍和用法 – 1.2 测试类型的三种方法,推荐第三种 if type(L) == type([]): print("L is list") if type(L) == list: print("L is list") if isinstance(L, list): print("