新手學習Python需要知道的100個小技巧,加班一晚上終於整理出來了!

来源:https://www.cnblogs.com/hahaa/archive/2022/12/10/16971627.html
-Advertisement-
Play Games

哈嘍兄弟們,今天給大家分享一下Python初學需要知道的100個小技巧~ 1、for迴圈中的else條件 這是一個for-else方法,迴圈遍歷列表時使用else語句。下麵舉個例子,比如我們想檢查一個列表中是否包含奇數。那麼可以通過for迴圈,遍歷查找。 numbers = [2, 4, 6, 8, ...


哈嘍兄弟們,今天給大家分享一下Python初學需要知道的100個小技巧~

1、for迴圈中的else條件
這是一個for-else方法,迴圈遍歷列表時使用else語句。下麵舉個例子,比如我們想檢查一個列表中是否包含奇數。那麼可以通過for迴圈,遍歷查找。

numbers = [2, 4, 6, 8, 1]

for number in numbers:
    if number % 2 == 1:
        print(number)
        break
else:
    print("No odd numbers")

 

如果找到了奇數,就會列印該數值,並且執行break語句,跳過else語句。沒有的話,就不會執行break語句,而是執行else語句。

2、從列表中獲取元素,定義多個變數

my_list = [1, 2, 3, 4, 5]
one, two, three, four, five = my_list

 

3、使用heapq模塊,獲取列表中n個最大或最小的元素

import heapq
scores = [51, 33, 64, 87, 91, 75, 15, 49, 33, 82]
print(heapq.nlargest(3, scores))  # [91, 87, 82]
print(heapq.nsmallest(5, scores))  # [15, 33, 33, 49, 51]

 

4、將列表中的所有元素作為參數傳遞給函數
我們可以使用 * 號,提取列表中所有的元素

my_list = [1, 2, 3, 4]

print(my_list)  # [1, 2, 3, 4]
print(*my_list)  # 1 2 3 4

 

如此便可以將列表中的所有元素,作為參數傳遞給函數

def sum_of_elements(*arg):
    total = 0
    for i in arg:
        total += i

    return total

result = sum_of_elements(*[1, 2, 3, 4])
print(result)  # 10
# 兄弟們學習python,有時候不知道怎麼學,從哪裡開始學。掌握了基本的一些語法或者做了兩個案例後,不知道下一步怎麼走,不知道如何去學習更加高深的知識。
# 那麼對於這些小伙伴們,我準備了大量的免費視頻,PDF電子書籍,以及源代碼!
# 直接在這個Q君羊 872937351 自取就好了 

 

5、獲取列表的所有中間元素

_, *elements_in_the_middle, _ = [1, 2, 3, 4, 5, 6, 7, 8]
print(elements_in_the_middle)  # [2, 3, 4, 5, 6, 7]

 

6、使用一行代碼賦值多個變數

one, two, three, four = 1, 2, 3, 4

 

7、列表推導式
只用一行代碼,便可完成對數組的迭代以及運算。比如,將列表中的每個數字提高一倍。

numbers = [1, 2, 3, 4, 5]
squared_numbers = [num * num for num in numbers]
print(squared_numbers) # [1, 4, 9, 16, 25]

 

推導式不僅列表能用,字典、集合、生成器也能使用。下麵看一下,使用字典推導式,將字典的值提高一倍。

dictionary = {'a': 4, 'b': 5}
squared_dictionary = {key: num * num for (key, num) in dictionary.items()}
print(squared_dictionary)  # {'a': 16, 'b': 25}

 

8、通過Enum枚舉同一標簽或一系列常量的集合
枚舉是綁定到唯一的常量值的一組符號名稱(成員)。在枚舉中,成員可以通過身份進行比較,枚舉本身可以迭代。

from enum import Enum

class Status(Enum):
    NO_STATUS = -1
    NOT_STARTED = 0
    IN_PROGRESS = 1
    COMPLETED = 2

print(Status.IN_PROGRESS.name)  # IN_PROGRESS
print(Status.COMPLETED.value)  # 2

 

9、重覆字元串

name = "Banana"
print(name * 4)  # BananaBananaBananaBanana

 

10、比較3個數字的大小
如果想比較一個值和其他兩個值的大小情況,你可以使用簡單的數學表達式。

1 < x < 10

 

這個是最簡單的代數表達式,在Python中也是可以使用的。

x = 3

print(1 < x < 10)  # True
print(1 < x and x < 10)  # True

 

11、使用1行代碼合併字典

first_dictionary = {'name': 'Fan', 'location': 'Guangzhou'}
second_dictionary = {'name': 'Fan', 'surname': 'Xiao', 'location': 'Guangdong, Guangzhou'}

result = first_dictionary | second_dictionary

print(result)
# {'name': 'Fan', 'location': 'Guangdong, Guangzhou', 'surname': 'Xiao'}

 

12、查找元組中元素的索引

books = ('Atomic habits', 'Ego is the enemy', 'Outliers', 'Mastery')
print(books.index('Mastery'))   # 3

 

13、將字元串轉換為字元串列表
假設你在函數中獲得輸出,原本應該是一個列表,但實際上卻是一個字元串。

input = "[1,2,3]"

 

你可能第一時間會想到使用索引或者正則表達式。實際上,使用ast模塊的literal_eval方法就能搞定。

import ast

def string_to_list(string):
    return ast.literal_eval(string)

string = "[1, 2, 3]"
my_list = string_to_list(string)
print(my_list)  # [1, 2, 3]
string = "[[1, 2, 3],[4, 5, 6]]"
my_list = string_to_list(string)
print(my_list)  # [[1, 2, 3], [4, 5, 6]]

 

14、計算兩數差值
計算出2個數字之間的差值

def subtract(a, b):
    return a - b
print((subtract(1, 3)))  # -2
print((subtract(3, 1)))  # 2

 

上面的這個方法,需要考慮數值的先後順序。

def subtract(a, b):
    return a - b

print((subtract(a=1, b=3)))  # -2
print((subtract(b=3, a=1)))  # -2

 

使用命名參數,安排順序,這樣就不會出錯了。

15、用一個print()語句列印多個元素

print(1, 2, 3, "a", "z", "this is here", "here is something else")

 

16、在同一行列印多個元素

print("Hello", end="")
print("World")  # HelloWorld
print("Hello", end=" ")
print("World")  # Hello World
print('words',   'with', 'commas', 'in', 'between', sep=', ')
# words, with, commas, in, between

 

17、列印多個值,在每個值之間使用自定義分隔符

print("29", "01", "2022", sep="/")  # 29/01/2022

print("name", "domain.com", sep="@")  # [email protected]

 

18、不能在變數名的開頭使用數字

four_letters = "abcd" # this works
4_letters = "abcd" # this doesn’t work

 

這是Python的變數命名規則

19、不能在變數名的開頭使用運算符

+variable = "abcd"  # this doesn’t work

 

20、數字的第一位不能是0

number = 0110 # this doesn't work

 

這個確實挺神奇的

21、在變數名的任何地方使用下劃線

a______b = "abcd"  # this works
_a_b_c_d = "abcd"  # this also works

 

這並不意味著,你可以無限使用,為了代碼的易讀性,還是需要合理使用。

22、使用下劃線分割數值較大的數字

print(1_000_000_000)  # 1000000000
print(1_234_567)  # 1234567

 

如此,看到一大堆數字時,也能輕鬆閱讀。

23、反轉列表

my_list = ['a', 'b', 'c', 'd']
my_list.reverse()
print(my_list)  # ['d', 'c', 'b', 'a']

 

24、使用步進函數對字元串切片

my_string = "This is just a sentence"
print(my_string[0:5])  # This
# Take three steps forward
print(my_string[0:10:3])  # Tsse

 

25、反向切片

my_string = "This is just a sentence"
print(my_string[10:0:-1])  # suj si sih

# Take two steps forward
print(my_string[10:0:-2])  # sjs i

 

26、使用開始或結束索引進行切片

my_string = "This is just a sentence"
print(my_string[4:])  # is just a sentence

print(my_string[:3])  # Thi

 

27、/和//的區別

print(3/2)  # 1.5
print(3//2)  # 1

 

28、==和is的區別
is:檢查兩個變數是否指向同一對象記憶體中,==:比較兩個對象的值

first_list = [1, 2, 3]
second_list = [1, 2, 3]
# 比較兩個值
print(first_list == second_list)  # True
# 是否指向同一記憶體
print(first_list is second_list)  
# False
third_list = first_list
print(third_list is first_list)  
# True

 

29、合併字典

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

merged = {**dictionary_one, **dictionary_two}

print(merged)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

 

30、檢查字元串是否大於另一字元串

first = "abc"
second = "def"

print(first < second)  # True

second = "ab"
print(first < second)  # False

 

31、檢查字元串是否以特定字元開頭(不使用索引)

my_string = "abcdef"
print(my_string.startswith("b"))  # False

 

32、使用id()查找變數的唯一id

print(id(1))  # 4325776624
print(id(2))  # 4325776656
print(id("string"))  # 4327978288

 

33、整數、浮點數、字元串、布爾值和元組都是不可變的

當變數被賦值為整數、浮點數、字元串、布爾值、元組這些不可變類型後,該變數就會指向一個記憶體對象。如果重新給變數再賦值,它的記憶體對象就會發生改變。

number = 1
print(id(number))  # 4325215472
print(id(1))  # 4325215472

number = 3
print(id(number))  # 4325215536
print(id(1))  # 4325215472

 

34、字元串和元組也是不可變的

此處再說明一次

name = "Fatos"
print(id(name))  # 4422282544

name = "fatos"
print(id(name))  # 4422346608

 

35、列表、集合和字典都是可變的

這意味著發生更改時,不會改變其記憶體對象。

cities = ["Beijing", "Guangzhou", "chengdu"]
print(id(cities))  # 4482699712

cities.append("Beijing")
print(id(cities))  # 4482699712

 

下麵是字典

my_set = {1, 2, 3, 4}
print(id(my_set))  # 4352726176

my_set.add(5)
print(id(my_set))  # 4352726176

 

36、把一個列表變成不可變的列表

my_set = frozenset(['a', 'b', 'c', 'd'])

my_set.add("a")

 

使用frozenset()後,你就無法更改了。

37、if-elif塊可以在沒有else塊的情況下存在

但是elif不能在沒有if語句之前獨立存在。

def check_number(number):
    if number > 0:
        return "Positive"
    elif number == 0:
        return "Zero"

    return "Negative"

print(check_number(1))  # Positive

 

38、使用sorted()檢查2個字元串是否為相同

def check_if_anagram(first_word, second_word):
    first_word = first_word.lower()
    second_word = second_word.lower()
    return sorted(first_word) == sorted(second_word)

print(check_if_anagram("testinG", "Testing"))  # True
print(check_if_anagram("Here", "Rehe"))  # True
print(check_if_anagram("Know", "Now"))  # False

 

39、獲取字元的Unicode值

print(ord("A"))  # 65
print(ord("B"))  # 66
print(ord("C"))  # 66
print(ord("a"))  # 97

 

40、獲取字典的鍵

dictionary = {"a": 1, "b": 2, "c": 3}

keys = dictionary.keys()
print(list(keys))  # ['a', 'b', 'c']

 

41、獲取字典的值

dictionary = {"a": 1, "b": 2, "c": 3}

values = dictionary.values()
print(list(values))  # [1, 2, 3]

 

42、交換字典的鍵、值位置

dictionary = {"a": 1, "b": 2, "c": 3}

reversed_dictionary = {j: i for i, j in dictionary.items()}
print(reversed)  # {1: 'a', 2: 'b', 3: 'c'}

 

43、將布爾值轉換為數字

print(int(False))  # 0
print(float(True))  # 1.0

 

44、在算術運算中使用布爾值

x = 10
y = 12
result = (x - False)/(y * True)
print(result)  # 0.833333333333333

 

45、將任何數據類型轉換為布爾值

print(bool(.0))  # False
print(bool(3))  # True
print(bool("-"))  # True
print(bool("string"))  # True
print(bool(" "))  # True

 

46、將值轉換為複數

print(complex(10, 2))  # (10+2j)

 


也可以將數字轉換為十六進位數。

print(hex(11))  # 0xb

 

47、在列表的第一個位置添加一個值

如果使用append(),將從列表的最後一個位置插入新值。可以通過使用insert(),來指定插入新元素的索引和數值。那麼列表的第一個位置為0,即下標為0。

my_list = [3, 4, 5]
my_list.append(6)
my_list.insert(0, 2)
print(my_list)  # [2, 3, 4, 5, 6]

 

48、Lambda函數只能在一行代碼中

無法通過多行代碼,來使用lambda函數。

comparison = lambda x: if x > 3:
                    print("x > 3")
                else:
                    print("x is not greater than 3")

 

報錯

 

 

 

49、Lambda中的條件語句應始終包含else語句

comparison = lambda x: "x > 3" if x > 3

 

運行上面的代碼,報錯。

 

 

 

這是由於條件表達式的特性,而不是lambda的導致的。

50、使用filter(),獲得一個新對象

my_list = [1, 2, 3, 4]

odd = filter(lambda x: x % 2 == 1, my_list)

print(list(odd))   # [1, 3]
print(my_list)  # [1, 2, 3, 4]

 

51、map()返回一個新對象

map()函數將給定函數應用於可迭代對象(列表、元組等),然後返回結果(map對象)。

my_list = [1, 2, 3, 4]

squared = map(lambda x: x ** 2, my_list)

print(list(squared))   # [1, 4, 9, 16]
print(my_list)  # [1, 2, 3, 4]

 

52、range()的step參數

for number in range(1, 10, 3):
    print(number, end=" ")
# 1 4 7

 

53、range()預設從0開始

def range_with_zero(number):
    for i in range(0, number):
        print(i, end=' ')

def range_with_no_zero(number):
    for i in range(number):
        print(i, end=' ')

range_with_zero(3)  # 0 1 2
range_with_no_zero(3)  # 0 1 2

 

54、不需要和0比較長度

如果長度大於0,則預設為True。

def get_element_with_comparison(my_list):
    if len(my_list) > 0:
        return my_list[0]

def get_first_element(my_list):
    if len(my_list):
        return my_list[0]


elements = [1, 2, 3, 4]
first_result = get_element_with_comparison(elements)
second_result = get_element_with_comparison(elements)

print(first_result == second_result)  # True

 

55、可以在同一個作用域內多次定義一個方法
但是,只有最後一個會被調用,覆蓋以前。

def get_address():
    return "First address"

def get_address():
    return "Second address"

def get_address():
    return "Third address"

print(get_address())  # Third address

 

56、在外部直接訪問私有屬性
在定義屬性或方法時,在屬性名或者方法名前增加兩個下劃線,定義的就是私有屬性或方法.如果想要在外部訪問,那麼只需要在名稱前面加上 ‘_類名’ 變成 ‘_類名__名稱’。

class Engineer:
    def __init__(self, name):
        self.name = name
        self.__starting_salary = 62000


dain = Engineer('Dain')
print(dain._Engineer__starting_salary)  # 62000

 

57、檢查對象的記憶體使用情況

import sys
print(sys.getsizeof("bitcoin"))  # 56

 

58、定義一個方法,可以調用任意個參數

def get_sum(*arguments):
    result = 0
    for i in arguments:
        result += i
    return result

print(get_sum(1, 2, 3))  # 6
print(get_sum(1, 2, 3, 4, 5))  # 15
print(get_sum(1, 2, 3, 4, 5, 6, 7))  # 28

 

59、使用super()或父類的名稱調用父類的初始化
使用super函數調用父類的初始化方法。

class Parent:
    def __init__(self, city, address):
        self.city = city
        self.address = address


class Child(Parent):
    def __init__(self, city, address, university):
        super().__init__(city, address)
        self.university = university


child = Child('Peking University', 'Fudan University', 'Tsinghua University')
print(child.university)  # Tsinghua University

 

使用父類的名稱調用父類

class Parent:
    def __init__(self, city, address):
        self.city = city
        self.address = address


class Child(Parent):
    def __init__(self, city, address, university):
        Parent.__init__(self, city, address)
        self.university = university


child = Child('Peking University', 'Fudan University', 'Tsinghua University')
print(child.university)  # Tsinghua University

 

60、在類中使用 + 操作符
在兩個int數據類型之間使用 + 運算符時,將得到它們的和。而在兩個字元串數據類型之間使用它時,會將其合併

print(10 + 1)  # 兩數相加
print('first' + 'second')  # 字元串相加

 

這個就是操作符重載,你還可以在類中使用(add)。

class Expenses:
    def __init__(self, rent, groceries):
        self.rent = rent
        self.groceries = groceries

    def __add__(self, other):
        return Expenses(self.rent + other.rent,
                        self.groceries + other.groceries)

april_expenses = Expenses(1000, 200)
may_expenses = Expenses(1000, 300)
total_expenses = april_expenses + may_expenses
print(total_expenses.rent)  # 2000
print(total_expenses.groceries)  # 500

 

61、在類中使用 < 和 == 操作符
下麵定義一個操作重載示例( < 操作符),使用__lt__方法。

class Game:
    def __init__(self, score):
        self.score = score

    def __lt__(self, other):
        return self.score < other.score

first = Game(1)
second = Game(2)
print(first < second)  # True

 

同樣的,== 操作符使用__eq__方法

class Journey:
    def __init__(self, location, destination, duration):
        self.location = location
        self.destination = destination
        self.duration = duration

    def __eq__(self, other):
        return ((self.location == other.location) and
                (self.destination == other.de

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ThreadLocal 線程數據共用和安全 1.什麼是ThreadLocal? ThreadLocal的作用,可以實現在同一個線程數據共用,從而解決多線程數據安全問題 當http請求發送到Tomcat服務端時,Tomcat會創建一個線程去處理這個http請求,如果是請求servlet,servlet ...
  • 1. 前言 最近做了一個支付相關的需求,要求在收銀台頁面顯示商品的價格時帶上貨幣符號¥,類似下圖中的格式: 最初我是用的下麵這樣的代碼: System.out.println(Currency.getInstance(Locale.CHINA).getSymbol()); 本機測試,正常返回¥,如下 ...
  • IPC視頻流怎麼實時在WEB瀏覽器播放,視頻流格式是RTSP。下麵我整理了自己實現的方案以及網上看到的一些方案 一、FFmpeg + nginx 將轉 hls 通過 video.js 在支持h5瀏覽器播放(我實現的) 參見:Nginx+FFmpeg實現rtsp流轉hls流,在WEB通過H5 vide ...
  • 在微信上搭建ChatGpt機器人 項目地址:https://gitee.com/shtml/wechatbot?_from=gitee_search 準備 一個伺服器:Windos,Centos,Ubuntu 環境:Go() 一個微信號用作機器人 一個OpenAI賬號 這裡我用還是用Centos7為 ...
  • 項目中的dao層,我們用來查詢資料庫,獲取想要數據。有時我們會需要查詢數據給結構體賦值,並返回一個結構體指針,如下 // 結構體欄位已與資料庫對應 func GetCommunity(id int) (community *model.CommunityDetail, err error) { sq ...
  • flask操作資料庫 準備工作 安裝flask-script(版本過高可能會報錯) pip install flask-script==2.0.3 使用flask-script里的Manager類實例化來管理項目的啟動等 from apps import create_app from flask_ ...
  • 前言 現在正是卡達世界盃激戰正酣的時候,每天都有各種各樣的新聞。而且,不同的球隊,隨著比賽的進程,關註的熱度也會發生翻天覆地的變化。今天我們就來獲取卡達世界的球隊熱搜榜,並製作自動發送郵件腳本,把這些數據發送到你的郵箱里。 開發環境 python 3.8 pycharm 2021.2 reque ...
  • flask一般項目結構 初始化配置flask項目時,路由和視圖是放在啟動文件里的,這樣不太方便我們後期的整理和查閱! 因此,我們需要將項目啟動文件和路由視圖分開處理! 在項目文件下創建一個apps的包,在包的初始化文件里定義一個函數,用來實現app相關的功能 init.py from flask i ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...