进制的转换可以采用内置函数的方式进行数据的转换,也可以使用int来转换,是将所需转换的数字按照某个进制的规则进行转换,最后转换的结果均为int类型
number = 20 # 方式一 # 二进制 print(bin(number)) # 八进制 print(oct(number)) # 十六进制 print(hex(number)) # 十进制 print(int(number)) # 方式二,只能转换为最后的int类型 # 将数字转按照八进制转换为int类型 print(int(str(number), base=8)) # 将数字转按照十六进制转换为int类型 print(int(str(number), base=16)) # 将0b二进制字符串按照二进制转换为int类型数字 print(int(str(bin(number)), base=2))
0b10100 0o24 0x14 20 16 32 20
需要注意的是,在python中,二进制、八进制、十六进制在输出显示时都会以十进制进行显示,但无需过多关注
b_number = 0b10100 print(b_number) o_number = 0o24 print(o_number) h_number = 0x14 print(h_number)
通过以下简易的函数可以看出最大递归数
def recursion(n):
print(n)
n += 1
recursion(n)
recursion(1)
受python版本不同,最大递归数也存在不同
python2.7: 1000, 在第1000次调用此函数时会出现异常 python3.6: 998, 在998次调用此函数时会出现异常
可以手动设置最大递归数的数量
import sys sys.setrecursionlimit(1200)
目前发现,当全部设置最大递归数为1200时,python2.7会在1200次报错,但python3.6会在1198次报错,相较少2次,依次可推出,默认的最大递归数应该是1000(第一次函数调用也算进去的话)。
| 对象 | 返回结果 | 优先顺序 |
|---|---|---|
| not x | if x is false,then True,else False | 1 |
| x and y | if x is false,then x,else y | 2 |
| x or y | if x is false,then y,else x | 3 |
v1 = 1 or 3 # 1 v2 = 1 and 3 # 3 v3 = 0 and 2 and 1 # 0 v4 = 0 and 2 or 1 # 1 v5 = 0 and 2 or 1 or 4 # 1 v6 = 0 or False and 1 # False
1 3 0 1 1 False
需要注意的是在python中,0也是代表False
在python中不存在如下注释的三元运算符,但是由三目运算符代替,可以将简单的条件分支语句写成一行,适用于需要将代码简化的场景,且相比较多行分支效率快一点。
a = 10 # print(a > 2 ? a : 0) print(a if a > 2 else 0)
1.python2 True、False可以作为一个变量,可以对其进行赋值及取值,python3则不可以, True、False作为关键字无法修改
True = 1 print(True) False = 0 print(False)
python2
python3
True = 1
^
SyntaxError: can't assign to keyword
2.python2默认使用ASCII编码,对中文需要手动添加文档头注释, python3则不需要
print('你好')
python2
File "/home/ts/flask_study/interview/05python2和python3的区别.py", line 12 SyntaxError: Non-ASCII character '\xe4' in file /home/ts/flask_study/interview/05python2和python3的区别.py on line 12, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
需在py文件最上方添加如下注释
# -*- coding:utf-8 -*-
python3:则没有影响
你好
3.python2的range返回一个list,资源消耗较大,python3返回一个可迭代对象,资源消耗较小,可使用for循环进行结果的迭代输出,python3的range取代了xrange。
data = range(10) print(data) print(type(data)) from typing import Iterable, Iterator, Generator print(isinstance(data, Iterable)) print(isinstance(data, Iterator)) print(isinstance(data, Generator))
python2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
python3
range(0, 10)True False False
4.python3引入nonlocal关键字,方便内部函数读取和修改外部函数的值,当内部函数读取和修改外部函数的值时,则外部函数和内部函数形成了闭包
def outter():
number = 10
def inner():
nonlocal number
number += 1
print(number)
return inner
outter()()
python2
UnboundLocalError: local variable 'number' referenced before assignment
python3
5.xreadlines、readlines读取文件,python2存在xreadlines,返回的是文件对象,资源消耗少,python3无xreadlines, python2、python3返回的readlines都是一个list, 建议可以直接迭代遍历open获得的对象
import os
file_path = os.path.join(os.path.dirname(__file__), "01进制转换.py")
print(file_path)
with open(str(file_path), mode="r") as f:
print(f)
print(type(f))
# print(isinstance(f, Iterable))
for line in f:
print(line)
# lines = f.xreadlines()
lines = f.readlines()
print(lines)
print(type(lines))
更多待更新中
print(bool(0))
print(bool(None))
print(bool([]))
print(bool({}))
print(bool(""))
print(bool(0j))
字符串
str_data = 'adminasdasd asdasd'
# 计算字符串中的元素出现次数
print(str_data.count('a'))
# 全部转为大写
print(str_data.upper())
# 以什么开头,可以指定开始的位置
print(str_data.startswith('a'))
# 截取字符串,使用较多
print(str_data.split('a'))
# 只在字符串首部将首字母大写
print(str_data.capitalize())
# 在字符串中的每个单词首字母大写
print(str_data.title())
# 字符串居中 前后补空格
print(str_data.center(22))
# 字符串前面补0
print(str_data.zfill(22))
5 ADMINASDASD ASDASD True ['', 'dmin', 'sd', 'sd ', 'sd', 'sd'] Adminasdasd asdasd Adminasdasd Asdasd adminasdasd asdasd 0000adminasdasd asdasd
列表
list_data = [1,2,3,4, [5,6]] # 添加元素 list_data.append(11) print(list_data) # 浅拷贝列表数据, 当修改其中的可变对象时,原有对象会发生改变 copy_list_data = list_data.copy() print(copy_list_data) copy_list_data[4].append(4) print(list_data) print(copy_list_data) # 删除对应值的元素 list_data.remove(3) print(list_data) # 统计某个元素出现的次数 print(list_data.count(1)) # 两个列表合并 list_data.extend(copy_list_data) print(list_data) # 列表排序,元素需要是同类型, 默认是升序 # list_data.sort() print(list_data) # 在指定下标插入元素 list_data.insert(0, -1) print(list_data) # 删除对应下标的元素 list_data.pop(4) print(list_data)
[1, 2, 3, 4, [5, 6], 11] [1, 2, 3, 4, [5, 6], 11] [1, 2, 3, 4, [5, 6, 4], 11] [1, 2, 3, 4, [5, 6, 4], 11] [1, 2, 4, [5, 6, 4], 11] 1 [1, 2, 4, [5, 6, 4], 11, 1, 2, 3, 4, [5, 6, 4], 11] [1, 2, 4, [5, 6, 4], 11, 1, 2, 3, 4, [5, 6, 4], 11] [-1, 1, 2, 4, [5, 6, 4], 11, 1, 2, 3, 4, [5, 6, 4], 11] [-1, 1, 2, 4, 11, 1, 2, 3, 4, [5, 6, 4], 11]
元组
tuple_data = (1,2,3,4,5,1,5) # 统计元素出现的次数 print(tuple_data.count(1)) # 获取某个下标的元素 print(tuple_data.index(1))
字典
dict_data = {"name":"tom", "age":10, "gender":"man"}
dict_data2 = {"city":"nanjing"}
# 获取字典的所有keys
print(dict_data.keys())
# 获取字典的所有values
print(dict_data.values())
# 获取字典的所有键值对,元组形式展示
print(dict_data.items())
# 合并两个字典
dict_data.update(dict_data2)
print(dict_data)
# 获取字典中的元素,可以设置默认值
print(dict_data.get('name', None))
# 删除字典中的元素
dict_data.pop('age')
print(dict_data)
# 生成新字典,取出字典的key, 设置默认的value值,默认value为None
print(dict_data.fromkeys(dict_data.copy(), "no data"))
# 删除字典中的元素,默认删除最后一个元素
dict_data.popitem()
print(dict_data)
# 获取字典中元素的值,当对应key不存在时会主动设置对应的key及返回设置的值, 当key存在时,此函数与get使用一致
print(dict_data.setdefault('age', 10))
print(dict_data)
# 清空字典
dict_data.clear()
print(dict_data)
dict_keys(['name', 'age', 'gender'])
dict_values(['tom', 10, 'man'])
dict_items([('name', 'tom'), ('age', 10), ('gender', 'man')])
{'name': 'tom', 'age': 10, 'gender': 'man', 'city': 'nanjing'}
tom
{'name': 'tom', 'gender': 'man', 'city': 'nanjing'}
{'name': 'no data', 'gender': 'no data', 'city': 'no data'}
{'name': 'tom', 'gender': 'man'}
10
{'name': 'tom', 'gender': 'man', 'age': 10}
{}
def sum(m,n):
return m+n
print(sum(1,2))
sum2 = lambda m,n:m+n
print(sum2(1,2))
lambda主要是针对于函数进行简化代码操作,但只能进行简单代码的简化,复杂代码不建议使用lambda,
使用场景
1.map、reduce、filter等进行序列处理时使用
l = list(range(1, 10)) data = map(lambda n:n*n, l) print(list(data)) from functools import reduce data = reduce(lambda m,n:m*n, l) print(data)
[1, 4, 9, 16, 25, 36, 49, 64, 81] 362880
2.lambda与list相结合, 注意lambda只会记录最后一次的状态,不会记录中间过程的状态
l2 = [lambda:i for i in range(10)] print(l2[0]()) print(l2[3]())
pass主要就是在代码实现过程中,暂时没有想好怎么实现的时候,一般在函数、方法中使用较多,避免因为函数或方法中没有内容导致报错
在函数或方法中, *args会将元素转换为元组, **kwargs会将x=y类似的元素转换为字典
def run(*args, **kwargs):
print(args)
print(kwargs)
run(1,2,a=1,b=2)
(1, 2)
{'a': 1, 'b': 2}