原则:可读性第一(效率固然重要,除非非常明显的效率差异,否则可读性优先)
学习炫技巧,更多为了读懂他人代码,自己开发过程中,相似代码量(可读性),建议使用通俗写法。反对为炫而炫。
1、and 和 or 的取值顺序
-
当一个
or
表达式中所有值都为真,取第一个值 -
当一个
and
表达式 所有值都为真,取第二个值。
>>>(2 or 3) * (5 and 7)
14 # 2*7
2、访问类的私有方法
访问类的私有方法,遵循封装原则可以把私有方法封装为公有方法
class Auth:
def __init__(self, name, password):
self.name = name
self.password = password
def __login(self):
if self.name == 'admin'or self.password == '123456':
returnTrue
returnFalse
def login(self):
if self.name isNoneor self.name == '':
print("登录名称不能为空")
returnFalse
if self.password isNoneor self.password == '':
print("登录密码不能为空")
returnFalse
return self.__login()
其中__login
为私有方法,通过login
进行封装。
3、启动ftp服务
python3 -m http.server 8888
4、连接列表几种方式
a =[1,2]
b = [3,4]
c = [5,6]
# 方式一
print(sum((a,b,c), []))
# 方式二
print(a + b +c )
# 方式三
print(list[*a,*b,*c])
5、合并字典的几种方式
import copy
user = {"name": "<NAME>", "email": "<EMAIL>"}
profile = {"gender": "<gender>", "age": "<age>"}
user1 = copy.copy(user)
# 方式一、通过字典的update
user1.update(profile)
print(user1)
# 方式二
print({**user, **profile})
# 方式三
print(dict(user.items() | profile.items()))
6、条件语句的几种写法
<on_true> if <condition> else <on_false>
<condition> and <on_true> or <on_false>
(<on_true>, <on_false>)[condition]
(lambda: <on_false>, lambda:<on_true>)[<condition>]()
# 标准三元表达式
age = 20
msg = "成年"if age >= 18else"未成年"
print(msg) # 输出: 成年
# and-or 链式逻辑
msg = age >= 18and"成年"or"未成年"
print(msg) # 输出: 成年
# 元组索引法
age = 20
msg = ("未成年", "成年")[age >= 18]
print(msg) # 输出: 成年
# Lambda 延迟执行
msg = (lambda: "未成年", lambda: "成年")[age >= 18]()
print(msg) # 输出: 成年
# 字典映射法
msg = {True: "成年", False: "未成年"}[age >= 18]
print(msg) # 输出: 成年
7、在 linux 上看 json 文件
cat test.json | python -m json.tool
8、判断是否包含子串的七种方法
使用 in 和 not in
使用 find 方法
使用 index 方法
使用 count 方法 5,借助 operator
text = "Hello, Python"
# 使用 in 和 not in
print("Python"in text) # 输出: True
print("Java"notin text) # 输出: True
# 使用 find 方法
index = text.find("Python")
print(index != -1) # 输出: True
# 使用 index 方法
idx = text.index("Python")
print(idx > 0) # 输出: True
# 使用 count 方法
count = text.count("apple")
print(count > 0) # 输出: True
# 借助 operator 模块
import operator
print(operator.contains(text, "Python")) # 输出: True
9、调试利器,显示调用栈
有时候BUG
隐藏的太深,需要对上下文都有清晰的展示来帮助判断。用pdb调试不方便,用print不直观。可以使用如下函数获取当前调用栈
import sys
def get_cur_info():
# 当前文件名
print sys._getframe().f_code.co_filename
# 当前函数名
print sys._getframe(0).f_code.co_name
# 调用该函数的函数的名字,如果没有被调用,则返回module
print sys._getframe(1).f_code.co_name
# 当前行号
print sys._getframe().f_lineno
10、内存占用
下面的代码块可以检查变量 variable 所占用的内存
import sys
variable = 30
print(sys.getsizeof(variable)) # 24
11、打印 N 次字符串
print("=" * 10) # 输出==========
12、解包
下代码段可以将打包好的成对列表解开成两组不同的元组。
array = [['a', 'b'], ['c', 'd'], ['e', 'f']]
transposed = zip(*array)
print(transposed)
# [('a', 'c', 'e'), ('b', 'd', 'f')]
13、链式函数调用
def add(a, b):
return a + b
def subtract(a, b):
return a - b
a, b = 4, 5
print((subtract if a > b else add)(a, b)) # 9
14、不使用 if-else 的计算
通过字典映射法处理逻辑判断、调用函数
import operator
action = {
"+": operator.add,
"-": operator.sub,
"/": operator.truediv,
"*": operator.mul,
"**": pow
}
print(action['-'](50, 25)) # 25
15、懒人必备技能:使用 “_”
大家对于他的印象都是用于 占位符,省得为一个不需要用到的变量,绞尽脑汁的想变量名。
在 console 模式下的应用,记忆功能
>>> 3 + 4
7
>>> _
7