day11__函數名的應用,python新特f-strings格式化輸出、迭代器

来源:https://www.cnblogs.com/mr-xiong/archive/2020/07/13/13296632.html
-Advertisement-
Play Games

一、函數名的應用 ​ 函數名的定義和變數的定義幾乎一致,在變數的角度,函數名其實就是一個變數,具有變數的功能:可以賦值;但是作為函數名他也有特殊的功能就是加上()就會執行對應的函數,所以我們可以把函數名當做一個特殊的變數 1、函數名指向的是函數的記憶體地址 ​ 函數名 + ()就可以執行次函數 def ...


一、函數名的應用

​ 函數名的定義和變數的定義幾乎一致,在變數的角度,函數名其實就是一個變數,具有變數的功能:可以賦值;但是作為函數名他也有特殊的功能就是加上()就會執行對應的函數,所以我們可以把函數名當做一個特殊的變數

1、函數名指向的是函數的記憶體地址

​ 函數名 + ()就可以執行次函數

def func():       ​ 
    print("呵呵")
​print(func)
輸出結果:
    <function func at 0x1101e4ea0>

​ 通過上面代碼可以我們知道,函數名指向的是這個函數的記憶體地址,其實深一步理解可得知,與其說函數名()可以執行這個函數,不如說是函數的記憶體地址()才是執行這個函數的關鍵,就好比:

a = 1
b = 2
c = a + b
print(c)  # 3

2、函數名可以賦值給其他變數

def func():        
    print("呵呵")    
print(func) 
a = func  # 把函數當成一個變量賦值給另一個變量​
a() # 函數調用 func()

3、函數名可以當容器類元素

def func1():
    print("in func1: 嘻嘻")
def func2():
    print("in func2: 哈哈")
def func3():
    print("in func3: 咯咯")
def func4():
    print("in func4: 吱吱")
lst = [func1, func2, func3, func4]
for i in lst:
    i()

4、函數名可以當做函數的參數

def func1():
    print('in func1')

def func2(f):
    print('in func2')
    f()

func2(func1)
輸出結果:
in func2
in func1

5、函數名可以作為函數的返回值

def func1():
    print('in func1')

def func2(f):
    print('in func2')
    return f
ret = func2(func1)
ret()
輸出結果:
    in func2
	in func1

二、Python新特性:f-strings格式化輸出

1、舊的格式化輸出方式

name = 'mrxiong'
age = 19
msg = '我叫%s,今年%s'%(name,age)
msg1 = '我叫{},今年{}'.format(name,age)
print(msg)
print(msg1)

2、新特性:格式化輸出 python3.6版本後適用

name = 'mrxiong'
age = 19
msg = f'我叫{name},今年{age}'
print(msg)

可以加表達式

dic={'name':'mrxiong','age':19}
msg = f'我叫{dic["name"]},今年{dic["age"]}'
print(msg)

count= 7
a = f'最終結果:{count*7}'
print(a)
name= 'mrxiong'
msg1= f'我的名字是 :{name.upper()}'
print(msg1)

結合函數 使用

def _sum(a,b):
    return a+b
msg2 = f'最終的計算結果是:{_sum(10,20)}'
print(msg2)
def _sum(a,b):
    return a+b
num=int(input('請輸入弟一個數字:'))
num1=int(input('請輸入第二個數字:'))

msg2 = f'最終的計算結果是:{_sum(num,num1)}'
print(msg2)

優點:1、結構更清晰更簡化,2、可以結合表達式及函數進行使用,3、效率提升很多

三、迭代器

1、可迭代對象

​ 字面意思:對像,python中一切皆對象,一個實實在在存在的值,對象

​ 可迭代:更新迭代。 重覆的,迴圈的一個過程。可進行迴圈更新的一個實實在在值

​ 專業角度:可迭代對像,內部含有’____iter‘_方法的對像,可迭代對像

​ 目前學過的可迭代對象:str list tuple dict set range 文件句柄

​ 判斷一個對像的所有方法:dir()

s1 = 'mrxiong'
print(dir(s1))
s1 = 'mrxiong'
print('__iter__'in dir(s1))
  • 小結
    • 字面意思:可以進行迴圈更新的一個實實在在值
    • 專業角度:可迭代對像,內部含有’____iter‘_方法的對像,可迭代對象
    • 判斷一個對像是不是可迭代對像:’____iter‘ in dir(對像)
    • str list tuple dict set range 文件句柄
    • 優點:
      • 存儲的數據直接能顯示,比較直觀
      • 擁有的方法比較多
    • 缺點:
      • 占用記憶體
      • 不能直接通過for迴圈,不能直接取值(索引,key)

2、迭代器

  • 迭代器的定義:

    • 字面意思:更新迭代,器:工具,可更新迭代的工具
    • 專業角度:內部含有'_____iter' 方法並且含有 '_____next' 方法的對象就是迭代器
    • 可以判斷是否是迭代器:'inter'and '_____next' 在不在dir(對象)
    • 判斷一個對象是否是迭代器
with open('a.txt', encoding='utf-8', mode='w') as f1:
    print('__iter__' in dir(f1) and '__next__' in dir(f1))
  • 可迭代對象如何轉化成迭代器並取值
s1 = 'adf'
obj = iter(s1)   #把s1轉換為一個迭代器
obj.__iter__()   #把s1轉換為一個迭代器第二種方法
print(next(obj)) #next對己轉換的迭代器進行取值
print(obj.__next__()) #next對己轉換的迭代器進行取值第二種方法
print(next(obj))


l1 = [11,22,33,44,55,66]
l2 = iter(l1)
print(next(l2))
print(next(l2))
print(next(l2))
print(next(l2))
print(next(l2))
print(next(l2))

l3 = iter([1,2,3,4])
print(next(l3))
print(next(l3))
print(next(l3))
print(next(l3))

可迭代對象轉換成迭代器

iter([1,2,3])

利用while迴圈模擬for迴圈對可迭代對象進行取值的機制

s1 = [11, 22, 33, 44, 55, 66, 77, 88]
obj = iter(s1)
while 1:
    try:
        print(next(obj))
    except StopIteration:
        break
  • 小結

    • 迭代器優點:

    1)節省記憶體。迭代器在記憶體中相當於只占一個數據的空間:因為每次取值都上一條數據會在記憶體釋放,載入當前的此條數據。

    2) 惰性機制。next一次,取一個值,絕不過多取值。

      有一個迭代器模式可以很好的解釋上面這兩條:迭代是數據處理的基石。掃描記憶體中放不下的數據集時,我們要找到一種惰性獲取數據項的方式,即按需一次獲取一個數據項。這就是迭代器模式。
    
    • 迭代器的缺點:

    ​ 不能直觀的查看裡面的數據。

    ​ 取值時不走回頭路,只能一直向下取值。

    ​ 速度慢

    • 可迭代對象與迭代器的對比

      • 可迭代對象:

      ​ 是一個私有的方法比較多,操作靈活(比如列表,字典的增刪改查,字元串的常用操作方法等),比較直觀,但是占用記憶體,而且不能直接通過迴圈迭代取值的這麼一個數據集。

      應用:當你側重於對於數據可以靈活處理,並且記憶體空間足夠,將數據集設置為可迭代對象是明確的選擇。

      • 迭代器:

      ​ 是一個非常節省記憶體,可以記錄取值位置,可以直接通過迴圈+next方法取值,但是不直觀,操作方法比較單一的數據集。

         **應用**:當你的數據量過大,大到足以撐爆你的記憶體或者你以節省記憶體為首選因素時,將數據集設置為迭代器是一個不錯的選擇。(可參考為什麼python把文件句柄設置成迭代器)。
      
      
      
      

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

-Advertisement-
Play Games
更多相關文章
  • 以下純屬個人觀點和建議,肯定是有局限性的,但是也希望能給你帶來一些幫助。 我們儼然能感受到前端崗位現在已經發展成了最重要的研發崗位之一,所以多我們提出的要求也就越來越高了。所以我們需要的也就不僅僅只是掌握css、html、JavaScript了,但是這三大件一直都是前端的根本,這一點從未改變,而這三 ...
  • 1. 引言 1.1. 背景 隨著時代的進步,社會的發展,人們的生活形式與習慣也越來越多樣化,出行成為了人們生活中的一個重要組成部分,而客車成為許多人出行選擇的交通工具。面對巨大數量的乘客的購票需要,客車站就要選擇使用先進的管理方法來實現方便、快捷的售票、退票等方面的票務管理。隨著電腦的普及,信息處 ...
  • 動畫是將靜止的畫面變為動態的藝術.實現由靜止到動態,主要是靠人眼的視覺殘留效應。視覺殘留也叫視覺暫留現象,物體在快速運動時, 當人眼所看到的影像消失後,人眼仍能繼續保留其影像0.1~0.4秒左右的圖像,這種現象被稱為視覺暫留現象。利用人的這種視覺生理特性可製作出具有高度想象力和表現力的動畫影片。 電 ...
  • 一、 引言 對於一個多人團隊來說,制定一個統一的規範是必要的,因為個性化的東西無法產生良好的聚合效果,規範化可以提高編碼工作效率,使代碼保持統一的風格,以便於代碼整合和後期維護。 二、 HTML/CSS規範 2.1 瀏覽器相容 根據公司業務要求而定,一般:主流程測試:Chrome 30+、IE9+; ...
  • 結構型模式 適配器模式 類適配器和對象適配器 結構型模式 結構型模式的重點在於如何通過靈活的體系組織不同的對象,併在此基礎上完成更為複雜的類型(或者類型系統),而參與組合的各類型之間始終保持儘量鬆散的結構關係。 結構型模式包括以下幾種: 適配器模式 橋接模式 組合模式 裝飾模式 外觀模式 享元模式 ...
  • 前段時間做了個node全棧項目,服務端技術棧是 nginx + koa + postgresql。其中在centos上搭建環境和部署都挺費周折,部署測試伺服器,接著上線的時候又部署生產環境伺服器。這中間就有很多既無聊又費精力,吃力不討好的"體力活"。所以就開始思考怎麼自動化這部分搭建部署的工作,也就 ...
  • 1 #include <emscripten/bind.h> 2 #include <string> 3 4 using namespace std; 5 using namespace emscripten; 6 7 class xClass { 8 public: 9 // 構造方法; 10 x ...
  • 繼golang第一天後,今天學習下golang的變數、常量、數據類型和控制流語句。 做過其他編程語言(比如JavaScript,java,python)項目的話,其實很好理解變數、常量、數據類型和控制流。 變數也被稱為“變數”,是反映事物運動變化狀態的量,比如匯率、房貸利率、貸款利率。 常量也被稱“ ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...