首页 文章详情

12个优雅的python代码使用案例

大邓和他的Python | 260 2023-02-10 22:57 0 0 0
UniSMS (合一短信)


1. 切片

翻转字符串顺序,使用切片str[::-1]

a = "Hello World!"
print(a[::-1])

"""
!dlroW olleH
"""

切片完整的写法 str[start: end: step]

  • start 字符串开始的索引值
  • end 字符串结束的索引值
  • step 间隔步长,默认为1。

一般切片时,只使用start和end, 不设置step。如果step为-1,即翻转顺序倒着切片。


2. not运算符

a = []
print(not a)

"""
True
"""

not是Python的内置关键词,一种 逻辑非 的运算符。在上面的代码中, 空列表[] 是一种类似False的效果, 而 not []即为真。类似的还有空字符串、空集合等空数据。


3. F-strings

first_name = "John"
age = 19

print(f"Hi, I'm {first_name} and I'm {age} years old!")

"""
Hi, I'm John and I'm 19 years old!
"""

自3.6以来,Python新增了字符串的格式化方法,在字符串内可以调用环境中的变量。

实现上面代码的功能,还可以用字符串的format方法

first_name = "John"
age  = 19

print("Hi, I'm {} and I'm {} years old!".format(first_name, age))

"""
Hi, I'm John and I'm 19 years old!
"""

3.8以后,Python的f-string新增了如下效果

x = 10
y = 20
print(f"{x = }{y = }")

"""
x = 10, y = 20
"""


4. print函数

4.1 end参数

a = ["english""french""spanish""german""twi"]
for language in a:
    print(language, end=" ")

"""
english french spanish german twi
"""

print函数end用于设定打印内容结尾的符号,默认换行符\n,所以在for循环使用print时候会看到内容是逐行显示的。

72. sep参数

print函数默认sep=" ",通过改变sep,打印的结果也会发生变化。

day = "04"
month = "10"
year = "2022"

print(day, month, year)
print(day, month, year, sep = " ")
print(day, month, year, sep = "")
print(day, month, year, sep = ".")




"""
04 10 2022
04 10 2022
04/10/2022
04.10.2022
"""


5.  合并字典

a = {"a"1"b"2}
b = {"c"3"d"4}

a_and_b = a | b
print(a_and_b)

"""
{"a": 1, "b": 2, "c": 3, "d": 4}
"""

3.9之后, python支持字典的 或|  来合并多个字典。


6.  条件语句

condition = True
if condition:
    name = "John"
else:
    name = "Doe"

print(name)
"""
John
"""

如果条件语句需要写在一行内,可以改写成

condition = True
name = "John" if condition else "Doe"

print(name)

"""
John
"""


7. 下划线_

下划线有以下三个常见的用处

  1. 调用最近(上一次)的运行结果
  2. 忽略不需要操作的值
  3. 定义变量名,避免与内置关键词冲突
  4. 下划线间隔的数字

7.1 调用结果

>>> print(_)
Traceback (most recent call last):
  File "<stdin>", line 1in <module>

>>> 1 + 2
3

>>> print(_)
3

_可以调用最近上一次 操作1+1 的运行 结果3

7.2 忽略不需要的值

除此之外, 下划线 _ 还可用在for循环中,忽略不需要的值。

for _ in range(100):
    print("The index doesn't matter")

"""
The index doesn't matter
The index doesn't matter
...
"""

7.3 定义变量名,避免与内置关键词冲突

#避免与关键词list、global冲突
list_ = [01234]
global_ = "Hi there" 

7.4 下划线数字

为了增加数字的可阅读性,可以在数字中加入下划线_

number = 1_500_000

print(type(number))
print(number)

"""
1500000
<class 'int'>
"
""

8. setdefault

使用字典做词频统计时,常见实现算法

  1. 检查该关键词是否存在于字典中
  2. 如果存在, 该关键词词频加1
  3. 如果不存在,该关键词词频设为1
import pprint

text = """It's the first of April. It's still cold in the UK. 
But I'm going to the museum so it should be a wonderful day"""


counts = {}
for word in text.split():
    if word in counts:
        counts[word] += 1
    else:
      counts[word] = 1
      
pprint.pprint(counts)


"""
{'April.': 1,
'But': 1,
"I'm": 1,
"It's": 2,
'UK.': 1,
'a': 1,
'be': 1,
'cold': 1,
'day': 1,
'first': 1,
'going': 1,
'in': 1,
'it': 1,
'museum': 1,
'of': 1,
'should': 1,
'so': 1,
'still': 1,
'the': 3,
'to': 1,
'wonderful': 1}
"“”

实际上,使用字典的setdefault方法,可以起到ifelse判断的作用。

counts = {}
for word in text.split():
    counts.setdefault(word, 0)
    counts[word] += 1

9. lambda函数

lambda函数更简洁,可以在一行代码内定义一个简洁的函数。

def square(num:int) -> int:
    return num ** 2

print(f"Function call: {square(4)}")
"""
Function call: 16
"""



square_lambda = lambda x: x**2
print(f"Lambda function: {square_lambda(4)}")
"""
Lambda functional: 16
"""


10. Try-Except

写代码的时候,经常会遇到报错,例如分母为0

def get_ration(x:int, y:int) -> int:
    ratio = x/y
    ratio = x/y
    return ratio

print(get_ratio(x=400, y=0))

"""
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-7-688c8b54e5ec> in <module>
      4     return ratio
      5 
----> 6 print(get_ratio(x=400, y=0))

NameError: name 'get_ratio' is not defined
"""

可以使用try except包裹住 "小错误",并对可能出错的地方进行微调,来忽略错误。

def get_ration(x:int, y:int) -> int:
    try:
        ratio = x/y
    except: ZeroDivisionError:
        y = y + 1
        ratio = x/y
    return ratio

print(get_ratio(x=400, y=0))

"""
400.0
"""


11. Args&Kwargs

def some_function(*args, **kwargs):
    print(f"Args: {args}")
    print(f"Kwargs: {kwargs}")

some_function(123,  a=4, b=5, c=6)

"""
Args: (1, 2, 3)
Kwargs: {'a': 4, 'b': 5, 'c': 6}
"""

使用*arg可以让函数传入任意多个参数,而**kwarg可以让函数传入任意多个键值对


12. 列表推导式

even_numbers = []

for x in range(10):
  #%取余数
  if x%2==0 and x!=0:
    even_numbers.append(x)
    
print(even_numbers)


"""
[2, 4, 6, 8]
"""

实现同样功能,列表推导式只需要一行

even_numbers = [x for x in range(10if x % 2 == 0 and x != 0]
print(even_numbers)

"""
[2, 4, 6, 8]
"""

精选文章

管理世界 | 使用文本分析词构建并测量短视主义

管理世界 | 使用 「经营讨论与分析」 测量 「企业数字化指标」

支持开票 | Python实证指标构建与文本分析

PNAS | 文本网络分析&文化桥梁Python代码实现

PNAS | 使用语义距离测量一个人的「创新力(发散思维)得分

MS | 使用网络算法识别『创新的颠覆性与否

金融研究 | 文本相似度计算与可视化

金融研究 | 使用Python构建「关键审计事项信息含量」

视频分享 | 文本分析在经管研究中的应用

转载 | 金融学文本大数据挖掘方法与研究进展

文本分析 | 「MD&A信息含量」指标构建代码实现

可视化 | 绘制《三体》人物关系网络图

长期征稿 | 欢迎各位前来投稿

17G数据集 | 深交所企业社会责任报告

70G数据集 | 上市公司定期报告数据集

27G数据集 | 使用Python对27G招股说明书进行文本分析

数据集 | 585w企业工商注册信息

数据集 | 90w条中国上市公司高管数据

可视化 | 绘制《三体》人物关系网络图

认知的测量 | 向量距离vs语义投影

Asent库 | 英文文本数据情感分析

tomotopy | 速度最快的LDA主题模型

100min视频 | Python文本分析与会计

安装python包出现报错:Microsoft Visual 14.0 or greater is required. 怎么办?

如何正确读入文本数据不乱码(解决文本乱码问题)

Faker库 | 生成实验数据

使用R语言绘制文本数据情感历时趋势图

NiceGUI库 | 简单易懂的Web GUI开发包;可开发数据标注工具、心理学实验工具等

CheatSheet | Python文本数据处理速查表

pandas | 使用 df.query 字符串表达式进行数据筛选


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter