Python筆記

来源:https://www.cnblogs.com/geniusrun/archive/2019/03/28/10612795.html
-Advertisement-
Play Games

列表[List] 元組(truple) 字典{dict} 生成器(generator) 帶有 yield 的函數在 Python 中被稱之為 generator(生成器) 迭代器 iterator 迭代器是訪問集合元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代 ...


  • 列表[List] 元組(truple) 字典{dict}
# 列表中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推
# list comprehension
[i for i in range(10)]
# 元組與列表類似,不同之處在於元組的元素不能修改
# truple generator
(i for i in range(10))
# 字典的每個鍵值 key=>value 對用冒號 : 分割,每個鍵值對之間用逗號 , 分割,整個字典包括在花括弧 {} 中
# dict comprehension
{k:1 for k in range(10)}
  • 生成器(generator)
    帶有 yield 的函數在 Python 中被稱之為 generator(生成器)
def my_range(n):
    i = 0
    while i != n:
        i += 1
        yield i


r = my_range(10)
for i in r:
    print(i)
  • 迭代器 iterator
    • 迭代器是訪問集合元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退
while True:
    try:
        i = next(iter_obj)
    except StopIteration:
        break

class Pow2(object):
    def __init__(self, max):
        self.max = max
        self.n = 0

    def __iter__(self):
        self.n = 0
        return self

    def __next__(self):
        if self.n < self.max:
            self.n += 1
            return 2 ** self.n
        else:
            raise StopIteration


p = Pow2(10)
for i in p:
    print(i)
  • 實例方法(instance method), 類方法(class method), 靜態方法(static method)
# instance method 
a = A() a.foo() a.bar()
# class method bind class
# static method

class A(object):
    @staticmethod
    def s_foo():
        pass

    @classmethod
    def c_foo(cls):
        pass

    def foo(self):
        pass

a = A()
a.foo()
A.c_foo()
  • 深拷貝 淺拷貝
# 深拷貝
from copy import deepcopy
l1 = []
l2 = deepcopy(l1)
l1.append(1)
print(l2)

# 淺拷貝
l1 = [1, [1, 2], 3]
l2 = l1[:]

def foo(a=[]):
    a.append(1)
    print(a)
foo()
foo()
  • lambda表達式, 閉包(closure)
    • lambda
     import functools
     import operator
     mul2 = lambda x: 2 * x
     print(mul2(3))
    
     print(list(map(lambda x: 3 * x, [1, 2, 3, 4])))
     print(list(filter(lambda x: x % 3 == 0, [1, 2, 3, 4])))
     print(functools.reduce(operator.add, [1, 2, 3, 4, 5], 5))
    • closure
     # 例子一
     def greeting(msg):
         def hello(name):
             print(msg, name)
         return hello
    
     h = greeting("welcome")
     h("akira")
    
     # 例子二
     l = []
     for i in range(10):
         def _(i=i):
             print(i)
         l.append(_)
    
     for f in l:
         f()
  • *args, **kwargs
    args獲取tuple, kwargs獲取kwargs
def log(*args, **kwargs):
    print("args", args)
    print("kwargs", kwargs)
log(1, 2, 3, 4)
log(1, 2, [1, 2, 3], c=4)
  • 遞推式構造列表
# list comprehension
r1 = [i for i in range(10)]
print(r1)
# dict comprehension
r2 = {k:1 for k in range(10)}
print(r2)
# list generator
r3 = (i for i in range(10))
print(list(r3))
  • 裝飾器(decorator)
    可用於AOP(aspect oriential programming)
    例如:
if debug:
    xxx
else:
    yyy

decorator例子

def simple_wrapper(fn):
    def _():
        #print(fn.__name__)
        return fn()
    return _

def fix_arg_wrapper(fn):
    def _(x):
        #print(fn.__name__)
        return fn(x)
    return _

def all_args_wrapper(fn):
    def _(*args, **kwargs):
        print(*args, **kwargs)
        return fn(*args, **kwargs)
    return _

@simple_wrapper
def foo():
    pass

@all_args_wrapper
def bar(a, b, c):
    pass

foo()
bar(1, 2, 3)
  • 魔法方法(magic method)

形如:
__xxx__

例子:

class LogAll(object):
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3
    def __getattribute__(self, item):
        print(item)

l = LogAll()
print(l.a)
l.a = 1
l.b
l.c

class Any(object):
    def __getattr__(self, item):
        print(item)

    def __setattr__(self, key, value):
        print("set", key, value)

a = Any()
a.a
a.a = 1

class Any2(object):
    def __getattr__(self, item):
        def _(*args, **kwargs):
            print("function name", item)
            print("args", args)
            print("kwargs", kwargs)

        setattr(self, item, _)

        return _


a = Any2()
a.a1(1, 2, 3)
a.a2(1, 2, [1, 2, 3], c=[])
  • Mixin模式
    例子:
class A(object):
    def foo(self):
        print("foo")
    def bar(self):
        print("bar")
        self.shit()

class B(object):
    def shit(self):
        print("shit")

class C(A, B):
    pass

c = C()
c.bar()
  • 字元串反轉
new_x = str_x[::-1]
  • 關於i++
    python 中的沒有 i++ ,如果寫了會報語法錯誤。
    但是python 中有 --i,++i,+-i,-+i,他們不是實現-1操作的,僅僅是作為判斷運算符號,類似數學中的負負得正
i = 2
print ++i  //2
print -+i   //-2
print +-i  //-2
print --i   //2
  • 邏輯表達式
    python 中沒有 && ,!, || 這3個運算符,在邏輯表達式中寫成這3個會抱邏輯錯誤的。要實現同樣的功能,要寫成 and,not,or
    返回值 2 and 3 返回3
    返回值 2 or 3 返回2
    返回值 not 2 and 3 返回 False

  • if-elif-else的寫法
    例如:比較兩個二叉樹是否相同
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def isSameTree(self, p: 'TreeNode', q: 'TreeNode') -> 'bool':
        if p is None and q is None:
            return True
        elif p is not None and q is not None:
            if p.val == q.val:
                return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
            else:
                return False
        else:
            return False
  • 其它
top_element = stack.pop() if stack else '#'

相當於

if stack:
    top_element = stack.pop()
else:
    top_element = '#'

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

-Advertisement-
Play Games
更多相關文章
  • OO第一單元作業總結 在第一單元作業中,我們只做了一件事情:求導,對多項式求導,對帶三角函數的表達式求導,對有括弧嵌套的表達式求導。作業難度依次遞增,讓我們熟悉面向對象編程方法,開始從面向過程向面向對象轉變。本文中,我將介紹我個人每一次作業的做法,以及三次作業的分析,互測時策略。 第一次作業 第一次 ...
  • 第一次OO博客作業 前言 面向對象課程已經經過了4周的時間。前三次作業全部是關於多項式求導的相關內容,內容由易到難,同時我也開始逐漸深入感受學習面向對象的各項特征,逐漸將自己的編程風格從C向真正的面向對象語言轉換。同時我還接觸了DEBUG和互測屋這樣嶄新的學習方式,在閱讀別人代碼的過程中不斷增強自己 ...
  • 一、由於項目需要進行手機看板展示設計及開發展示效果圖如下: 上圖為概況(點擊相應模塊進入詳情頁面) 上圖為運營統計(一些統計類圖標狀圖折線圖等......) 車輛分佈狀況(展示在地圖上分佈) 上圖為點擊一輛車的軌跡和運行情況 此產品唯一亮點在於完全可以把利用HTML5和echarts開發大數據大屏展 ...
  • 本文是BUAA OO課程Unit1在課程講授、三次作業完成、自測和互測時發現的問題,以及傾聽別人的思路分享所引起個人的一些思考的總結性博客。本文第二部分介紹三次作業的設計思路,主要以類圖的形式展現,並有簡單的優劣分析;第三部分為程式代碼複雜度的分析(二、三兩部分為基於度量的對自己程式結構的分析);第... ...
  • 一、前言 經過一個月來的學習,我從對面向對象一無所知到逐漸入門,圍繞著“多項式求導”,對面向對象的特性進行了探索。 我對面向對象印象最深的兩句話就是“萬物皆對象”和“高內聚、低耦合”,這三次作業也是儘量貫徹了這兩句話。 我們的作業從第一次的僅含冪函數的求導,到第二次包含正餘弦函數,再到最後函數可以嵌 ...
  • 一. 基於度量的程式結構分析 1. 第一次作業 這次作業是我上手的第一個java程式,使用了4個類來實現功能。多項式採用兩個arraylist來存,繫數和冪指數一一對應。 四個類分別為 Poly類,代表表達式; PolyDiff類,代表求導運算; PolyParse類,封裝了格式檢查,encodin ...
  • 前言 好的代碼需要有高內聚、低耦合、易擴展且擴展改動小等特點。說實話,我入行很久之後,才知道這些設計原則的名字,但是我並不覺得陌生,反而有一種理所當然的感覺。這得感謝自學時網路上前輩們推薦的書籍,培養了自己的代碼潔癖,還得感謝轉行後的第一個東家!以下只是我的理解,如有錯誤,請指正。 單一職責原則 顧 ...
  • return語句 return語句用來從一個函數中 返回 即跳出函數。當然也可以從函數中返回一個值。 運行結果 DocStrings Python有一個很奇妙的特性,稱為 文檔字元串 ,它通常被簡稱為 docstrings 。DocStrings是一個重要的工具,由於它幫助你的程式文檔更加簡單易懂, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...