Python易错点6

 73.数组切片

hhh='ABCabcDEFdef'
print(hhh[2:-1:3])

  运行结果:CcF

[开始:结束:间隔]

不包括结束位置

74.  编码与解码

编码就是编成字节码

字符串根据utf8编码encode为字节码,字节解码decode对应的字符串。

有一个UTF-8编码的文件,需要转码成GBK编码的文件:decode(‘utf-8’) —> encode(‘gbk’),注意这里文件就是字节码

先解码再编码

 

 75.python空字符,空数组,空元组,空字典

False、0、''、[]、{}、()、set()都可以视为False,但不是None

可变对象 空[]、空{}和空set is为False,不可变对象 空()、空'' is 都为True

空对象id()都相同

# 空元组 为False
if ():
    print('()')

if not ():
    print('not ()')

# 空字符 为False
if '':
    print("\'\'")
if not '':
    print("not \'\'")

# 空列表 为False
if []:
    print('[]')
if not []:
    print('not []')

# 空{} 为False
if {}:
    print('{}')
if not {}:
    print('not {}')

# 空set 为False
if set():
    print('set()')

if not set():
    print('not set()')

  

 75.比较操作

字符串与任何类型比较在python3中都不允许

print(100<'a')
print({}<'abc')
print("abc" > [1,2])

TypeError: '>' not supported between instances of 'str' and 'list'

75.1 整形和布尔形可以比较,bool是Int的子类

bool类型是int的子类,且True=1, False=0

print(1.2 > True)  # True
print(1 > True)  # False
print(bool('0'))  # True
print(bool('1'))  # True
print(bool('-1'))  # True

75.2 字符比较,按照字典序:'ab'>'aa'(True)

75.3 整形和字符不可比较

str和int比较时会抛出异常
TypeError: '<' not supported between instances of 'int' and 'str'

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

[1,5]<[3,4,6] # True
[1,4,[5,6]]<[3,4,6] # True
[3,4,[5,6]]<[3,4,6] # typeError: '<' not supported between instances of 'list' and 'int'

76 python链式比较

python的链式比较按照数据表达式的方式进行计算:
4>3==3 (True)# 4>3 and 3==3

优先级 比较 高于 等于

77  for循环删除列表元素

注意,列表起始位置的内存地址不变,每次删除一个元素时会将后面的元素向前移动。而for遍历时记录的是位置

 答案:B

 

因为for循环实际是循环的列表下标(索引),同时由于列表的可变性,每一次删除一个元素,列表的长度就会发生变化,元素的索引也会发生变化。

而remove是对值进行操作的

 

第一次循环,循环索引为0,此时索引为0的元素是1,因此data_list中第一个1被删除了,此时data_list 为[2, 3, 4, 5]

第二次循环,循环索引为1,此时索引为1的元素是3,因此data_list中元素3被删除了,此时data_list为[2, 4, 5]

第三次循环,循环索引为2,此时索引为2的元素是5,因此data_list中元素5被删除了,

此时data_list为[2, 4]

由于新列表长度为2,于是循环结束

78. 序列相加相乘

print([1, 2] + [3, 4]) # [1, 2, 3, 4]
print([1, 2] * 3) # [1, 2, 1, 2, 1, 2]
print('abc' * 3) # abcabcabc单元素必须加逗号才是元组,否则就是单变量
print(('abc',) * 3) # ('abc', 'abc', 'abc') 

79. 可变参数传递

  • 函数中同时存在元组参数与字典参数时,元组参数一定要放在字典参数前边。
  •  只要是可变参数,一定要放在普通参数后边。
  •  可变参数在函数调用时必须解封装后传递,否则函数内部会当做一个参数进行处理(无论元组或者字典)

80. 字符串拼接方法

  • str 是不可变对象,所以每次拼接都会生成一个新对象,效率很低
  • 列表拼接
chunks = []
my_strings = ['a', 'b', 'c']
for s in my_strings:
    chunks.append(s)
result = ''.join(chunks)
print(result)

  除了使用列表的方式io.StringIO拼接也可以用于字符串拼接

import io
output = io.StringIO()
output.write('Fisrt line.\n')
print('Second line.', file=output)
contents = output.getvalue()
output.close()
print(contents)

  

  •  bytearray方法不能拼接字符串

81. windows环境变量的先后顺序

windows 环境变量的查找顺序是按照文件的录入的顺序从前向后找的,最前面一条的优先级最高,如果找到命令就不会再向后找 因此新增环境变量的时候,最好将新添加的放在最前面 以获得最高优先级

82. 什么是模块?库?和包?

python模块是:

自我包含并且有组织的代码片段为模块。

表现形式为:写的代码保存为文件。这个文件就是一个模块。sample.py 其中文件名smaple为模块名字

python包是:

包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。

通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包

python库是:

参考其它编程语言的说法,就是指python中的完成一定功能的代码集合,供用户使用的代码组合。在python中是包和模块的形式。

2.如何导入包和模块?

1、import xxx.xx

2、from xxx.xx import xxx

3、__init__.py

           3.1、  __all__ = []

           3.2、 from xx.xx import *

           3.3、 from xxx import xx

83.  面向对象编码

(1)对于类的公有属性,不应该在名称前加下划线

(2)对于简单的类公有变量,最好不要设置过多的getter/setter,直接访问即可

(3)classmethod首选使用cls拼写作为第一个参数的名称

(4)避免使用属性进行计算成本高昂的操作

 84.转义字符

当你用单引号' '定义字符串的时候,它就会认为你字符串里面的双引号" "是普通字符,从而不需要转义。反之当你用双引号定义字符串的时候,就会认为你字符串里面的单引号是普通字符无需转义

print("a'b")  # a'b
print("""a'b""")  # a'b
print("a\'b")  # a'b
print("a'b")   # a'b
print('a''b'"c")  # abc

85.元组

注意单纯的()不是元组,单个元素的元组需要加上逗号(1,)

                                                                                                                                                                                                         

 

posted @ 2020-12-21 20:25  GumpYan  阅读(325)  评论(1编辑  收藏  举报