天天看點

Python實用小技巧檢視函數運作效率判斷字典中鍵是否存在元素互換初始化清單三元操作符進行條件指派多行字元串存儲清單元素到單個變量中用代碼設定斷點FizzBuzz問題同時疊代多個清單清單轉換為字元串疊代分組更多技巧。。。

目錄

  • 檢視函數運作效率
  • 判斷字典中鍵是否存在
  • 元素互換
  • 初始化清單
  • 三元操作符進行條件指派
  • 多行字元串
  • 存儲清單元素到單個變量中
  • 用代碼設定斷點
  • FizzBuzz問題
  • 同時疊代多個清單
  • 清單轉換為字元串
  • 疊代分組
  • 更多技巧。。。

檢視函數運作效率

以下代碼會列印出abc函數裡調用了幾次其它函數, 各用了多少時間, 總共用了多少時間等資訊:

# -*- coding: utf-8 -*-
import profile

def abc():
    for i in range(50):
        print("i: %s" % str(i))

profile.run('abc()')
           

當然,如果隻想知道函數運作時間,也可以采用以下方法:

# -*- coding: utf-8 -*-
import time

def abc():
    start = time.time()
    for i in range(50):
        print("i: %s" % str(i))
    end = time.time()
    print("time: %0.3f" % (end - start))

abc()
           

更多詳細用法可參考profile的官方說明。

判斷字典中鍵是否存在

以下代碼可以判斷一個鍵是否在字典中存在:

# -*- coding: utf-8 -*-
abc = {'a': 'a', 'b': 'b'}

def is_key_exist(key):
    if abc.get(key, None): # 關鍵代碼
        print(key + ' is exist')
    else:
        print(key + ' is not exist')

is_key_exist('b')
           

元素互換

以下代碼可以把a, b的值互換

# -*- coding: utf-8 -*-

a = 3
b = 5
a, b = b, a
           

初始化清單

在定義清單時進行初始化:

# -*- coding: utf-8 -*-

arr = ['a'] * 5
print(arr) # arr = ['a', 'a', 'a', 'a', 'a']
           

三元操作符進行條件指派

# -*- coding: utf-8 -*-

y = 2
x = 10 if y == 1 else 20
print(x) # x = 20
           

多行字元串

将字元串分為多行并且将整個字元串包含在括号中:

# -*- coding: utf-8 -*-

x = ("select"
     " * "
     "form"
     " abc")

print(x) # select * form abc
           

存儲清單元素到單個變量中

# -*- coding: utf-8 -*-

lst = ['a', 'b', 'c']
x, y, z = lst # x=a y=b z=c
           

用代碼設定斷點

使用pdb 子產品可以直接在腳本中設定斷點:

# -*- coding: utf-8 -*-

import pdb
lst = ['a', 'b', 'c']
x, y, z = lst # x=a y=b z=c
pdb.set_trace() # 代碼運作後,執行會在此中斷。在控制代碼輸入'c'後,繼續執行。
print(x)
           

FizzBuzz問題

需求:列印數字1到100,3的倍數列印“Fizz”來替換這個數,5的倍數列印“Buzz”,對于既是3的倍數又是5的倍數的數字列印“FizzBuzz”。

for x in range(1, 101):
    print("fizz"[x % 3 * len('fizz')::] + "buzz"[x % 5 * len('buzz')::] or x)
           

同時疊代多個清單

zip() 函數用于将可疊代的對象作為參數,将對象中對應的元素打包成一個個元組,然後傳回由這些元組組成的對象,這樣做的好處是節約了不少的記憶體。

# -*- coding: utf-8 -*-

a = [1, 2, 3]
b = [4, 5, 6]
for i, j in zip(a, b):
    print(i + j) # 5, 7, 9
           

清單轉換為字元串

# -*- coding: utf-8 -*-

lst = ['a', 'b', 'c']
print('+'.join(lst)) # a+b+c
           

疊代分組

需求:有4名選手,分成兩兩一組進行比賽,有幾種分法?代碼如下:

# -*- coding: utf-8 -*-

from itertools import combinations
teams = ["player1", "player2", "player3", "player4"]
for game in combinations(teams, 2):
    print(game)
    # ('player1', 'player2')
    # ('player1', 'player3')
    # ('player1', 'player4')
    # ('player2', 'player3')
    # ('player2', 'player4')
    # ('player3', 'player4')
           

更多用法,請檢視itertools庫官方說明。

更多技巧。。。

以後遇到好的技巧,會不斷的往該文章中更新,有需要的朋友可以收藏起來!