今天早上看了一篇讲python黑魔法的博客
做一下学习笔记记录

trick:

连接多个列表
>>> a = [1,2]
>>> b = [3,4]
>>> c = [5,6]
>>>
>>> sum((a,b,c), [])
[1, 2, 3, 4, 5, 6]
\作为续行符
>>> a = 'talk is cheap,'\
...     'show me the code.'
>>>
>>> print(a)
talk is cheap,show me the code.
try...finally...
def func():
  try:
    return 'try'
  finally:
    return 'finally'

print(func())

finally
  • parameter:形参(formal parameter),体现在函数内部,作用域是这个函数体。
  • argument :实参(actual parameter),调用函数实际传递的参数。
+= 与 =+

对列表 进行+= 操作相当于 extend,而使用 =+ 操作是新增了一个列表。

# =+
>>> a = [1, 2, 3, 4]
>>> b = a
>>> a = a + [5, 6, 7, 8]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8]
>>> b
[1, 2, 3, 4]


# +=
>>> a = [1, 2, 3, 4]
>>> b = a
>>> a += [5, 6, 7, 8]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8]
>>> b
[1, 2, 3, 4, 5, 6, 7, 8]
字典合并
>>> profile = {"name": "xiaoming", "age": 27}
>>> ext_info = {"gender": "male"}
>>>
>>> full_profile = dict(profile.items() | ext_info.items())
>>> full_profile
{'gender': 'male', 'age': 27, 'name': 'xiaoming'}

或者

>>> profile = {"name": "xiaoming", "age": 27}
>>> ext_info = {"gender": "male"}
>>>
>>> dict(list(profile.items()) + list(ext_info.items()))
{'name': 'xiaoming', 'age': 27, 'gender': 'male'}
判断是否包含子串
in方法 
>>> "llo" in "hello, python"
True
>>>
>>> "lol" in "hello, python"
False


find方法
>>> "hello, python".find("llo") != -1
True
>>> "hello, python".find("lol") != -1
False
>>

index方法
def is_in(full_str, sub_str):
    try:
        full_str.index(sub_str)
        return True
    except ValueError:
        return False

print(is_in("hello, python", "llo"))  # True
print(is_in("hello, python", "lol"))  # False

count方法
#count 是完全匹配
def is_in(full_str, sub_str):
    return full_str.count(sub_str) > 0

print(is_in("hello, python", "llo"))  # True
print(is_in("hello, python", "lol"))  # False

正则匹配
import re

def is_in(full_str, sub_str):
    if re.findall(sub_str, full_str):
        return True
    else:
        return False

print(is_in("hello, python", "llo"))  # True
print(is_in("hello, python", "lol"))  # False
海象运算符

有了海象运算符之后,你可以和 Golang 一样(如果你没学过 Golang,那这里要注意,Golang 中的 := 叫短变量声明,意思是声明并初始化,它和 Python 中的 := 不是一个概念)

if (age:= 20) > 18:
    print("已经成年了")
转义相关

raw字符串(原始字符串):如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀r,表示这是一个 raw 字符串,里面的字符就不需要转义了。

a = r'''\n\n

abc'''

print(a)
------
输出:
\n\n

abc
------
print(codecs.decode(a, 'unicode_escape'))
------
输出:


abc
------
print(repr(a))
------
输出:
'\\n\\n\n\nabc'