python基础之八:知识小结及补充

一、python2 与python3 的区别

1、在2中print后可带扣号,也可不带,3中必须带,否则报错!

#print 'hello python2'
print('hello python3')

2、在2中有xrange()生成器,也有range(),而3中只有range()

for i in range(1, 10, 2):
    print(i)

3、python2中,raw_input()把输入的都当作字符串,而input()输入什么类型就是什么类型-->int类型的时候最好用input()

python3将raw_input和input进行整合成了input....去除了raw_input()函数....其接受任意输入, 将所有输入默认为字符串处理,
并返回字符串类型

input('python3 输入的任何字符都会被视为字符串!')

二、“=”,“==”与“is”的区别 id(内容) ->查看内容的内存地址

“=” 赋值
“==”比较值是否相等
“is”比较的是内存地址是否相同
li1 = [1, 2, 3]
li2 = li1
print(li1 == li2)
print(li1 is li2)
print(id(li1), id(li2))
三、python中的小数据池 (为节约空间,将小段数据只保存一份在内存中)
    只有字符串、数字在该池中;
    数字的范围是:-5 -- 256 在池中
    字符串:1)不能含特殊字符
   2)S*20 还是同一内存地址,S*21以后就是两个内存地址了(S表示单个英文字符) --> 实际测试不准,如100个a,内存地址却相同
 1 s1 = 'abcd中'
 2 s2 = 'abcd中'
 3 print(id(s1), id(s2)) # 此环境下是相同的,windows命令行下是False
 4 
 5 n1, n2 = 6, 6
 6 print(n1 is n2)
 7 n3, n4 = 300, 300
 8 print(n3 is n4)  # 在此环境下是True,在window10 命令行下如此写也是True
 9 n5 = 300
10 n6 = 300
11 print(n5 is n6)  # 在此环境下是True,在window10 命令行下如此却是False
View Code

    其他数据类型如:list、dict、tuple、set不包含在小数据池中

tu1 = ("1", 2)
tu2 = ("1", 2)
print(tu1 is tu2) # 输出False

 四、基本数据类型知识小结

  到目前为止,接触到的基本数据类型有:

  int、str、list、bool、tuple、dict、bytes

  1  1、int
  2 # int.bit_length()
  3 # int.to_bytes()
  4 # int.from_bytes()
  5 # int.mro()
  6 
  7 # 2、str
  8 #str.isspace()
  9 
 10 # 3、list
 11 '''
 12 补充一个循环列表,删除元素时越界的问题:在列表循环过程中删除列表中的元素(避免)
 13 '''
 14 # 越界的示例:删除过程中,列表在改变
 15 # for i in range(len(li)):
 16 #     if(i%2 == 1):
 17 #         li.pop(i)
 18 
 19 li = [11, 22, 33, 44, 55]
 20 
 21 # 需求,循环上述列表li,删除奇数数位的值
 22 # 普通方法
 23 li_odds = li[1::2]
 24 for i in li_odds:
 25     li.remove(i)
 26 print(li)
 27 # 高级方法
 28 for i in range(len(li)-1, -1, -1): # range(start, stop[, step]) 即顾头不顾尾:从4开始到-1,即4,3,2,1,0,步长是-1,因为是倒着数
 29     print(i)
 30     if i % 2 == 1:
 31         del(li[i])
 32 print(li)
 33 
 34 for i in range(5, 0, -1): # 倒数5到0,没有0,所以是:5,4,3,2,1
 35     print(i)
 36 
 37 # 4、bool
 38 # 转化成bool值
 39 # 各种可转换成False的 : 0 ''  [] () {} set()
 40 print(bool(0), bool(''), bool([]), bool(()), bool({}), bool(set()))
 41 
 42 
 43 # 5、tuple 元祖
 44 tu1 = (1)  # 如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型。
 45 tu2 = (1,)
 46 print(type(tu1), type(tu2))  # 打印结果:<class 'int'> <class 'tuple'>
 47 
 48 tu3 = ([1])
 49 tu4 = ([1],)
 50 print(type(tu3), type(tu4))  # 打印结果:<class 'list'> <class 'tuple'>
 51 
 52 l1 = []
 53 l2 = l1
 54 l3 = l1
 55 l3.append('a')
 56 print(l1, l2, l3)  # ['a'] ['a'] ['a']
 57 
 58 
 59 dic1 = dict.fromkeys([1, 2, 3], 4)
 60 print(dic1)  # 结果是:{1: 4, 2: 4, 3: 4}
 61 print(dic1[1])  # 结果肯定是4
 62 
 63 # 6、dict
 64 
 65 dic = dict.fromkeys([1, 2, 3], '春哥')
 66 print(dic)
 67 dic = dict.fromkeys([1, 2, 3], [])
 68 print(dic)  # {1: [], 2: [], 3: []}
 69 dic[1].append('袁姐')
 70 print(dic)  # {1: ['袁姐'], 2: ['袁姐'], 3: ['袁姐']}
 71 dic[2].extend('二哥')  # extend用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
 72 print(dic)  # {1: ['袁姐', '二', '哥'], 2: ['袁姐', '二', '哥'], 3: ['袁姐', '二', '哥']}
 73 
 74 dic2 = dict.fromkeys([1, 2, 3], [1])
 75 dic2[1].append('东西')  # 添加到一个value列表,结果都添加了
 76 print(dic2)
 77 
 78 # # # # 删除keys中不包含k字母的字典元素#############
 79 # #  原则是,集合在循环中不能删除自己的元素,即集合自带的删除方法不要使用,用系统给的del()
 80 # 方法一:
 81 dic4 = {'k1': 'v1', 'k2': 'v2', 'a3': 'v3'}
 82 dic5 = {}
 83 
 84 for i in dic4:
 85     if 'k' not in i:  # 字符串的成员运算符 - 如果字符串中不包含给定的字符返回 True
 86         dic5.setdefault(i, dic4[i])
 87 # 完成上述循环后,dic5 = {'a3': 'v3'}
 88 dic4 = dic5  # 将dic5的值赋给dic4,覆盖原来的值
 89 print(dic4)  # {'a3': 'v3'}
 90 
 91 # 方法二:
 92 li_tmp = []
 93 for j in dic4:
 94     if 'k' not in i:
 95         li_tmp.append(j)
 96 for k in range(len(li_tmp) - 1, -1, -1):
 97     del(dic4[k])
 98 print(dic4)
 99 
100 #  简化版本
101 l = []
102 for i in dic4:
103     if 'k' in i:
104         l.append(i)
105 for i in l:
106     del dic4[i]
107 print(dic4)
View Code
posted @ 2019-11-22 15:28  四方游览  阅读(144)  评论(0)    收藏  举报