python进阶,16个必须掌握的炫技操作

原则:可读性第一(效率固然重要,除非非常明显的效率差异,否则可读性优先)

学习炫技巧,更多为了读懂他人代码,自己开发过程中,相似代码量(可读性),建议使用通俗写法。反对为炫而炫。

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、判断是否包含子串的七种方法

  1. 使用 in 和 not in

  2. 使用 find 方法

  3. 使用 index 方法

  4. 使用 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值