if _name_ == '_main_'
中的部分不会被调用,只有运行该脚本时才会执行;其他部分则会被其他程序调用。(注:被调用时_name_
等于文件名,并非_main_
,因此不会执行)- 对于分隔符出现在首尾的情况,在首尾处分割,会产生同一个空串(有几个分隔符就有几个空串),对于出现在字符串中间的情况,单独出现,和普通情况没有区别,如果出现多个,两个分隔符中间就会产生一个空串。如下,结果输出为
['', 'I', 'like', 'python', '']
。
strs = ' I like python '
one = strs.split(' ')
print(one)
a = [['1','2'] for i in range(2)]
输出结果为[['1', '3'], ['1', '2']]
;在python中, 如果用一个列表a乘一个数字会得到一个新的列表b, 这个新的列表b的元素是a的元素重复n次(元组也可以,字典和集合不行)。若a中的元素为引用类型时,则需要注意其为浅拷贝(只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存):
a = [[1,2]]
b = a * 2 # b -> [[1, 2], [1, 2]]
# 修改b[0][0], b[0][1]同样被修改了, 这是因为b[0]与b[1]有相同的地址
b[0][0] = 3
print(b) # [[3, 2], [3, 2]]
# 打印b[0]和b[1]的 id
print(id(b[0])) # 1904838110536
print(id(b[1])) # 1904838110536
- 函数调用:
inner()
函数返回的是带括号的(即调用了该函数,因此执行),若为return inner
则不执行print('正在验证权限')
。
def w1():
print('正在装饰')
def inner():
print('正在验证权限')
return inner()
w1()
- Python严格区分大小写
list.append(obj)
:在列表末尾添加新对象;
list.extend(obj)
:在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表,就像套娃);
list.insert(index, obj)
:将对象插入列表;
set.add(element)
:可以给集合添加元素(并不是添加到末尾)。- 对于代码:
class Rectangle:
__count = 0
def __init__(self,width,height):
Rectangle.__count += 1
self.__width = width
self.__height = height
@property
def area(self):
return self.__height * self.__width
rectangle = Rectangle(200,100)
- 切片操作时如果索引越界不会导致IndexError,只是返回一个空序列;若为索引访问则会导致IndexError。以下程序输出结果为
[]
list = ['1', '2', '3', '4', '5']
print list[10:]
- 装饰器:通过一个特殊的语法@,将一个函数作为参数传递给装饰器函数,然后返回一个新的函数。这个新的函数通常会包含原函数的所有功能,同时还会添加一些新的功能。在
fun()
顶部写@outer
等同于将fun
函数作为一个参数传入outer
,写法如:fun = outer(fun)
。因此会执行print ('outer')
输出一个outer
。又因为return inner
没有()
,所以不会输出inner
。
def outer(fn):
print('outer')
def inner():
print('inner')
return fn
return inner
@outer
def fun():
print('fun')
str.endswith(suff, start, end)
用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。list.count()
方法用于统计某个元素在列表中出现的次数;
list.pop()
函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 。
另print()
对操作无影响。- python3中,集合不能索引取值。以下程序会报错:
TypeError: 'set' object is not subscriptable
sets = {1, 2, 3, 4, 5}
print(sets[2])
- 在Python3中,
list.remove(obj)
表示移除列表中某个值的第一个匹配项。 read()
读整个文件;readline()
读一行;readlines()
读所有行到list 。- python·中四种命名方式:
1.object #公用方法
2. _object #半保护,只有类对象和子类对象自己能访问到这些变量,在模块或类外不可以使用,不能用’from module import *’导入。
3. __object #全私有,全保护。只有类对象自己能访问,连子类对象也不能访问到这个数据,不能用’from module import *’导入。
4. __object__ #内建方法,用户不要这样定义 。
- 函数内部修改同名全局变量需要使用global关键字声明,否则报
UnboundLocalError
。 __init__
是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。
__new__
是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。
即,__new__
在__init__
之前被调用,__new__
的返回值(实例)将传递给__init__
方法的第一个参数,然后__init__
给这个实例设置一些参数。- 浅复制:浅拷贝只会拷贝父对象,不会拷贝子对象,通俗的说就是只会拷贝到第二层;
深复制:复制对象所有值,两者无任何关系。
以下代码中:b和a只是名字不同,a改变b会随之改变;c中的子对象会随a变化;d不会随a发生变化。
import copy
a = [1, 2, 3, 4, ['a', 'b']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('c')
- 对于以下代码,
re.match(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等 |
pattern
r'(.*)on(.*?) .*'
,其中r
表示后面的字符串是一个普通字符串(比如\n
会译为\
和n
,而不是换行符);
()
符号包住的数据为要提取的数据,通常与.group()
函数连用, .group(0)
输出的是匹配正则表达式整体结果,.group(1)
列出第一个括号匹配部分,.group(2)
列出第二个括号匹配部分;
.
表示匹配单个任意字符;
*
表示匹配前一个字符出现0次或无限次;
?
表示匹配前一个字符出现0次或1次;
(.*)
提取的数据为str1
字符串中on
左边的所有字符,即Pyth
;
(.*?)
提取的数据为str1
中on
右边,空格前面,即's
;
flags
re.M
:多行匹配,影响^
和$
;
re.I
:使匹配对大小写不敏感;
re.L
:做本地化识别(locale-aware)匹配;
re.S
:使.
匹配包括换行在内的所有字符;
re.U
:根据Unicode字符集解析字符。这个标志影响 \w
, \W
, \b
, \B
;
re.X
:该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
import re
str1 = "Python's features"
str2 = re.match( r'(.*)on(.*?) .*', str1, re.M|re.I)
print str2.group(1)
a%b
是求余数。辗转相除法,又称欧几里得算法,以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。0
的布尔值为False
,1
的布尔值为True
。extend()
是将元素直接添加;append()
是直接添加对象。
lists = [1, 2, 3, 4, 5, 6]
lists.append([7,8,9])
print(lists) # 输出结果为[1, 2, 3, 4, 5, 6, [7,8,9]]
lists = [1, 2, 3, 4, 5, 6]
lists.extend([7,8,9])
print(lists) # 输出结果为[1, 2, 3, 4, 5, 6, 7, 8, 9]]
dict.get()
的键不存在,返回默认值None
;dict.get()
的键不存在,返回默认修改值18
;- python导入模块的搜索顺序为:①内建模块。首先判断这个module是不是built-in即内建模块,如果是内建模块则引入内建模块,如果不是则在一个称为sys.path的list中寻找;②sys.path返回的列表中寻找:
- 程序的根目录(即当前运行python文件的目录)
- PYTHONPATH环境变量设置的目录
- 标准库的目录
- 任何能够找到的.pth文件(路径配置文件)的内容
- 第三方扩展的site-package目录
- python3中,集合不能索引取值,因此会报错:
TypeError: 'set' object is not subscriptable
sets = {1, 2, 3, 4, 5}
print(sets[2])
python3
中,关于字典的pop
方法需要指定删除的key
。- 在
Python3
中,字符串的strip()
函数为删除字符串的前后空格,rstrip()
为删除字符串末尾的空格。 - 访问字典的元素主要依靠字典的
key
,使用不存在的键访问会报错。 - 闭包:如果一个函数内部又定义了一个函数,就把外部的函数称为外函数,内部的函数称为内函数。如果内函数引用了外函数的变量,而外函数返回内函数(引用),就把这种形式称之为 闭包。并且当外函数结束时会将变量绑定给内函数。
def adder(x):
def wrapper(y):
return x + y
return wrapper
adder5 = adder(5)
print(adder5(adder5(6)))
# adder(5) = wrapper(x=5, y)
# adder5 = wrapper(x=5, y)
# adder5(6) = wrapper(x=5, 6) = 5 + 6 = 11
# adder5(adder5(6)) = adder(11) = wrapper (x =5, 11) = 5 + 11 = 16
str.strip([chars])
用于移除字符串头尾指定的字符(默认为空格或换行符,指定即chars
中的所有字符)或字符序列。
strs = 'abbacabb'
print(strs.strip('ab'))
# 输出结果为 'c'
center()
返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。默认填充字符为空格。题目中填充长度width=10
, 填充字符为*
,最终的结果为'***abcd***'
。
strs = 'abcd'
print(strs.center(10, '*'))
# 输出结果为 '***abcd***'
Python2
中除法默认向下取整,因此1/2
= 0,为整型。Python3
为数学式运算,则1/2
=0.5为浮点型。- Python 中的标识符不能以数字开头,这也是普遍编程语言的通用规则。
recvfrom()
:UDP传输,与recv()
(TCP协议)类似,但返回值是(data,address)
;
getsockname()
获取连接套接字的远程地址。通常是一个元组(ipaddr,port)
;
connect()
初始化TCP服务器连接 连接到address处的套接字。一般address的格式为元组(hostname,port)
,如果连接出错,返回socket.error
错误;
服务端使用listen()
开始TCP监听。- 异常错误
#A
a = 1
b = 2
a,b = b,a
#B
a,*b,c = range(5)
print(a,b,c)
#C
lis = ['1','2']
a,b = list(map(int,lis))
print(a,b)
#D
tup = (1,(2,3))
a,b,c = tup# 应是 a,(b,c) = tup
print(a,b,c)
- 不可变数据类型每次在设置默认值时候都会初始化,放在函数的形参里赋值的时候,每次函数调用都会执行
a =()
,a()
元组都会变成空值;可变数据类型,每次只在第一次时候执行赋值。
def fun(a=(),b=[]):
a += (1,)
b.append(1)
return a,b
fun()
print(fun())
isinstance(object,classinfo)
,用于判断object
是否是classinfo
的一个实例,或者object
是否是classinfo
类的子类的一个实例,如果是返回True
;issubclass(class,classinfo)
,用于判断class
是否是classinfo
类的子类,如果是返回True
。.reshape(a,b)
,将矩阵改成a*b
的格式,若a=-1
,则将矩阵改为b
列;若b=-1
,则将矩阵改为a
行。- Python变量作用域查找遵循LEGB原则:Local 局部变量>Enclosing 外部嵌套作用域>Global 全局作用域>Built-in 内置模块作用域。
- 当函数的的形参单独为*时,它并不属于未匹配的位置参数,而是表示后面的参数必须使用关键字参数进行匹配,所以这里会抛出异常。对于下面的函数,调用时参数a可以任意值, 但b参数一定要以关键字参数的形式传参,如f1(1, b=4),否则将会报错。
def fun(a,*,b):
print(b)
fun(1,2,3,4)
return
不可以返回多个值,实际上返回的是一个元组。- 对于+=操作,如果是可变对象,则操作前后序列的id值不变,如果是不可变对象,则操作前后序列的id值改变。
enumerate()
返回索引和对象。- Python语言中,if后任何非0和非空(null)值为True,0或者null为False。
str1 = ''
str2 = ' '
if not str1:
print(1)
elif not str2:
print(2)
else:
print(0) # 1