[Python][华为云Python编程创造营][学习笔记][09_Python的使用技巧]
1,Python的小技巧
1.1,代码风格
- 写文章:文章应该分为若干个自然段、每段开头空两格。
- 写古诗:要押韵、要工整。
- 写代码:要美观,要让人能看懂。
- 每种语言结合自身的特征都有着符合自身优势的代码风格,就像每个人都有自己的说话风格。
1.2,PythonIC
- PythonIC,以Python的方式写出具有Python风格的代码。
- 如何做到?
遵守PEP8
善于使用Python的特点(语法糖),如:切片、上下文管理器、列表推导式等。
1.3,语法糖
- 语法糖(Syntactic sugar),也叫糖衣语法,即用更简练的代码表达更复杂的功能。
就像是我们说话时使用的成语。
在代码中加糖以后,语法并不会改变,代码会更加简洁。
- Python中的语法糖:
切片,上下文管理器,装饰器......
1.4,Python之禅
import this
print(this)
'''
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
'''
1.5,方便的字符串
- 在Python中字符串支持乘法操作,所以可以使用这样的方式输出一些特殊的字符串
print("*"*20)
print(" "*20)
print(" "*7+"python"+" "*7)
print(" "*20)
print("*"*20)
'''
********************
python
********************
'''
1.6,互换
- 程序中实现a和b对应的值互换:
a = 10
b = -10
a,b = b,a
1.7,三目运算符
- 比较两个数字,输出大的那一个:
print(a if a> b else b)
- 使用if-else简化的写法称为三目运算符(三元表达式)。
exp1 if condition else exp2
1.8,隐式判断条件
- 在判断条件中使用隐式的True和False
a=""
if 1 == True:
print("True 1")
if 10 > 15 == True:
print("True 2")
if a == None:
print("True 3")
#######################
a=""
if 1 :
print("True 1")
if 10 > 15:
print("True 2")
if a:
print("True 3")
1.9,简洁的推导式
- 生成一个列表:[i**2 for i in range(-5,5) if i%2] # [25, 9, 1, 1, 9]
- 生成一个集合:{i**2 for i in range(-5,5) if i%2} # {25, 9, 1}
- 生成一个字典:{x:y for x,y in zip(["a","b"],(1,2))} # {'a': 1, 'b': 2}
2.0,小整数对象池(1)
- Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。
小整数范围[-5,256]
这些整数对象会被事先建立好,不会被回收,为变量赋值时直接指向这些建立好的地址。
2.1,小整数对象池(2)
- 简单的字符串在内存使用上同样也有优化:
当字符串中不存在空格和特殊字符。
2.2,变量的作用域规则 - LEGB
在Python中变量的作用域可以分为四部分:
- Local(function):函数内的名字空间
- Enclosing function locals:外部嵌套函数的名字空间(例如closure)
- Global(module):函数定义所在模块(文件)的名字空间
- Builtin(Python):Python内置模块的名字空间
2.3,数据解包
如何获取一个列表中的数据呢?
for i in [1,2,3]:
print(i)
解包:
- 使用相同数量的变量接收:a,b,c = [1,2,3]
- 使用*:L = [1,2,3] print(*L)
2.4,Python的"动态"
- 在Python中声明变量时不需要指定类型
- 在类和对象的使用中可以动态的为对象添加属性和方法。
a = 1
b = "python"
c = [1,2]
print(type(a))
print(type(b))
print(type(c))
# 输出结果
# <class 'int'>
# <class 'str'>
# <class 'list'>
##########################
class student(object):
def __init__(self):
self.age = 18
s = student()
s.name = "哈哈"
print(s.name + " " + str(s.age)) # 哈哈 18
2,Python垃圾回收机制
- Python的内存管理是由Python的解释器负责的,开发人员可以从内存管理器事务中解放出来。
- Python中的垃圾回收机制以"引用计数"(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通过
"标记-清除"(mark and sweep)解决容器对象可能产生的循环引用的问题。
通过"分代回收"(generation collection)以空间换时间来进一步提高垃圾回收的效率。
- 点赞
- 收藏
- 关注作者
评论(0)