python 隱秘的角落
1. *args 和 **kwargs 的使用
# 此處一定要注意 python 中有預設值得引數一定一定要放在沒有預設值的後邊。
# *args 是以元組型別傳入
# **kwargs 是字典型別傳入
def parameter_learn(parameter_1, parameter_2=none, *args, **kwargs):
""" *args, **kwargs 引數傳遞的使用
:param parameter_1: 此處的 parameter_1 一定要在 parameter_2 前面
:param parameter_2:
:param args: 當出現預設賦值時(ps:parameter_2=none) args 可能無法生效。
:param kwargs: 無順序新增加引數時將新引數直接傳入即可( ps:kwarg_1=1 ) ; 引數將以字典的形式傳入
:return:
print(parameter_1, parameter_2)
print(args)
print(kwargs)
parameter_learn(parameter_1=1, parameter_2=2, kwarg_1=1)
"""result:
1 2# 按位置傳參
def parameter_learn2(parameter_1, parameter_2, *args, **kwargs):
:param parameter_1: 第乙個位置引數
:param parameter_2: 第二個位置引數
:param args: 第二個後面的位置引數
:param kwargs: 字典傳入的引數
:return:
print(parameter_1, parameter_2)
print(args)
print(kwargs)
parameter_learn2(1, 2, 3, 4, 5, kwarg_1=1, kwarg_2=2)
"""result:
1 2(3, 4, 5)
2. 三元運算子
if-else 語句
# 普通判斷語句
a = 10
if a < 11:
a += 1
print(a)
else:
a -= 1
print(a)
"""result:
# 三元表示式
# 格式:(變數1) = 符合條件返回:(變數 or 常量 or 表示式) if (條件) else 否則不符合條件返回:(變數 or 常量 or 表示式)
a = 10
b = a + 1 if a < 11 else a - 1
print(b)
"""result:
3.列表推導式
# 列表推導式 生成乙個列表 0-99 能被2整除 或者 能被3整除的自然數
a_list = [x for x in range(0, 100) if x % 2 == 0 or x % 3 == 0]
print(a_list)
# result:
[0, 2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 26, 27, 28, 30, 32, 33, 34, 36, 38, 39, 40, 42, 44, 45, 46, 48, 50, 51, 52, 54, 56, 57, 58, 60, 62, 63, 64, 66, 68, 69, 70, 72, 74, 75, 76, 78, 80, 81, 82, 84, 86, 87, 88, 90, 92, 93, 94, 96, 98, 99]
4.數值互換
# python 可以直接進行數值互換
a = 1
b = 2
c = 3
a, b, c = b, c, a
print(a, b, c)
# result:
3 1 4
5.反轉
# 字串反轉
str1 = "123456789"
print(str1[::-1])
# 987654321
# 列表反轉
list1 = [1, 2, 3, 4, 5, 6, 7]
print(list[::-1])
# [7, 6, 5, 4, 3, 2, 1]
6.for - else 組合
# for-else 語句。
for i in [1, 2, 3, 4]:
print(i)
if i == 1:
# 當執行 break 語句時, else是不會執行的。
break
# 只要執行完 for 迴圈語句就會執行 else。
else:
print("i am else")
7. lambda 匿名函式
# x, y 是引數, x + y 是返回值
func = lambda x, y: x + y
print(func(1, 2))
# result:
# 38.生成器 和 迭代器
# 迭代器
class mynumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = mynumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
"""result:
# 生成器 (本質上也是迭代器)
# for 迴圈條件 迭代物件必須是可迭代物件
def get_number():
for data in range(0, 100):
# 有 yield 的就叫做生成器
yield data
a1 = get_number()
print(next(a1))
9.裝飾器
# 裝飾器
def learn(func):
def inner(*args, **kwargs):
print(args)
print(kwargs)
func(*args, **kwargs)
return inner
@learn
def learn1(a, b, *args):
print(a + b)
return a + b
learn1(1, 2, 90, 0)
# result:
(1, 2, 90, 0)
使用setuptools自動安裝python模組
setuptools絕對是個好東西,它可以自動的安裝模組,只需要你提供給它乙個模組名字就可以了,並且自動幫你解決模組的依賴問題。一般情況下用setuptools給安裝的模組會自動放到乙個字尾是.egg的目錄裡,下面看看怎麼用setuptools。之後安裝模組的使用方法就是使用乙個叫easy inst...
使用virtualenv建立虛擬python環境
環境 ubuntu 初始化環境 剛用到這個東西時,會聯想到虛擬機器和影子系統,不過相比於後兩者,virtualenv更為便捷。不需要重啟系統進入影子模式,也不需要啟動虛擬機器拖慢你的系統。你只需要通過命令建立乙個虛擬環境,不用的時候通過命令退出,甚至刪除,均可。安裝virtualenv 安裝過程可能...
爬蟲Scrapy框架的安裝和使用(Python)
好處 省事,快速搭建乙個系統,快速抓取資料。壞處 細節不清楚,框架的限制需要考慮,學習成本高,可能隱藏了很多未知的問題。安裝scrapy in ubuntu sudo apt get install python dev python piplibxml2 dev libxslt1 dev sudo...