函數, lambda表達式

来源:http://www.cnblogs.com/yangbin1110/archive/2017/04/28/6782046.html
-Advertisement-
Play Games

函數, get()與setdefault(), lambda表達式,三元運算, 遍歷list與dict的方法. ...


函數

  • 函數:簡單的理解,就是一次執行很多行代碼
  • 函數的返回值
  • 函數的參數,和變數沒區別

例:

def hello(): 
    print "hello world" 
hello() 
hello()  

列印結果: 
hello world
hello world  

返回值:

def hello(): 
    print "hello world" 
print hello  # 指函數,就是函數在記憶體里的一個地址. 
print hello() # 指函數返回值 

def hello(): 
    # print "hello world"
    return 2017 
hello   
print hello()  2017

參數:

def hello(name):
    print "Hello %s" % name
    return 2017
hello("yangbin")
print hello("asd")

執行結果: 
Hello yangbin
Hello asd
2017

print是列印出來看.
return是返回值.

5階乘, 54321
f(n)

def f(num):
    for i in range(1, int(num)+1):
        count = i * int(num)
        print count
f(5) 

執行結果: 
5
10
15
20
25

關鍵字參數的調用,和位置無關,只和名字相關:

def hello(name,age):
    return name,age
print hello("yangbin", 22)
print hello(age = 22, name = "yangbin") 

執行結果: 
('yangbin', 21)
('yangbin', 22)

使代碼更健壯:

def hello(name = "yangbin",age = 22):
    return name,age
print hello("yangbin", 22)
print hello() 

執行結果: 
('yangbin', 22)
('yangbin', 22)

參數不固定的時候:

關鍵字參數調用的時候,可讀性好
關鍵字參數在函數定義的時候,提供預設值

開頭的參數,收集所有剩下參數(位置參數) 元組

開頭的參數,收集所有剩下參數(關鍵字參數) 字典

1.多個函數之間,儘量避免全局變數

通用的函數:變化的東西,都由參數來定
函數當成參數傳遞

python自帶的sorted函數

sorted(待排序的list,key傳遞一個函數-決定根據元素的哪個屬性進行排序)

http://blog.csdn.net/zyl1042635242/article/details/43115675

函數當成參數,傳給了sorted

lambda 就是沒有名字的函數(特別簡單的,只有return語句的函數)
語法:

lambda 參數:返回值

示例:

def hello(x):
    return x[1]
print hello([2,3])
hello = lambda x:x[1]
print hello([2,3])

執行結果: 
3
3

函數作用域:

函數內部的變數和全局變數不是在一個區域里的,函數內部變數,現在函數內部找,找不到才會去全局找
函數內部作用域賦值,對外部無影響
函數內部想修改全局變數,要用global聲明一下

get()函數:

get() 函數返回指定鍵的值,如果值不在字典中返回預設值。
語法:

dict.get(key, default=None) 

key -- 字典中要查找的鍵。
default -- 如果指定鍵的值不存在時,返回該預設值。

get()和setdefault()的區別:

一. get 函數 -- 獲得給定鍵相關聯的值

dict = {'name':'lorine','age':'25'}
dict.get('name')  # 返回name對應的鍵值lorine,如果此鍵不存在字典中,則會返回None;
dict.get('work','student')  # 如果對應的鍵'work'不在字典中,則會返回預設的'student'

二. setdefault 函數 -- 獲得給定鍵相關聯的值,並更新字典,還能在字典中不含有給定鍵的情況下設置相應的鍵值

dict = {'name':'lorine','age':'25'}
dict.setdefault('name')  # 或者dict.setdefault('name','lili')都是返回name對應的值lorine;
dict.setdefault('work')  # 此鍵值不存在,則更新字典添加此鍵和預設值dict ={'name':'lorine','age':'25','work':None};
dict.setdefault('work','student')  # 則更新字典dict ={'name':'lorine','age':'25','work':'student'};

用get函數優化代碼:

D = {"192.168": 2}
ip = "192.168"
# if ip in D:
#     D[ip] += 1
# else:
#     d[ip] = 1
# print D

res = {}
res[ip] = D.get(ip, 0) + 1
print res

遍歷list的三種方法:

num = [1, 2, 3, 4, 5, 6]
for i in num:
    print i

for i in range(len(num)):
    print num[i]

for i,j in enumerate(num):
    # print i, j
    print j

遍歷dict的兩種方法:

info = {"name": "yangbin", "age": 22, "sex": "male"}
for i in info.keys():
    print i, info[i]

for k,v in info.items():
    print k,v 

三元運算: 學習條件運算時,對於簡單的 if else 語句,可以使用三元運算來表示,即:

if 12 > 20:
    print "True"
else:
    print "False"

result = "True" if 12 > 20 else "False"
print result

運行結果: 
False
False

lambda表達式: 對於簡單的函數,也存在一種簡便的表示方式,即:lambda表達式.

# 普通函數表示:
def f(num):
    return num + 1
# print f(20)
result = f(20)
print result

# lambda表達式表示: 
定義函數
my_lambda = lambda args: args + 1 
執行函數
result = my_lambda(20)
print result

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

-Advertisement-
Play Games
更多相關文章
  • 當我們的一個對象可能代表一個單一的實體,或者一個組合的實體,但是仍然需要通過同樣的方式被使用時,這種情形則適合使用組合模式的設計。 ...
  • 預計分數:100+50+50 實際分數:5+50+100 =.= 多重背包 (backpack.cpp/c/pas) (1s/256M) 題目描述 提供一個背包,它最多能負載重量為W的物品。 現在給出N種物品:對於第i類物品,一共有Ci件物品;對於每一件物品,重量為Wi,價值為Vi。 找出一種裝載方 ...
  • 知乎指南 知乎讓我增長了見識, 看到了很多真實故事, 喝了百樣的雞湯, 所以我決定以後不看知乎了 知乎給我的錯覺:階段性 第一周 我打開了新的大門, 很多有意思的段子, 看上去很有內涵, 不過都很老套 有很多故事, 大家似乎都願意講他們的故事, 看客很多, 會屏蔽666, 老鐵, 233之類的評論 ...
  • 裝飾器模式詳解地址 原文總結 定義: 在不必改變原類文件和使用繼承的情況下, 動態的擴展一個對象的功能. 通過創建一個包裝對象, 也就是裝飾來包裹真實的對象 部分詳解提示 看了一些文檔, 裝飾器模式非常依賴構造器 與 重寫方法 裝飾器模式的特點: 不改變原來的類 , 不使用繼承 , 動態擴展 流這塊 ...
  • 本篇博客我們繼續的來聊SpringMVC的東西,下方我們將會聊到js、css這些靜態文件的載入配置,以及伺服器推送的兩種實現方式。當然我們在伺服器推送時,會用到jQuery的東西,所以我們先聊一下如何載入靜態資源文件,然後我們再聊如何實現伺服器推送。 下方給出了兩種實現伺服器推送的方式,一種是SSE ...
  • Hibernate的二級緩存 理解緩存定義: 緩存(Cache):電腦領域非常通用的概念。它介於應用程式和永久性數據存儲源(如硬碟上的文件或者資料庫)之間,其作用是降低應用程式直接讀寫永久性數據存儲源的頻率,從而提高應用的運行性能。緩存中的數據是數據存儲源中數據的拷貝。緩存的物理介質通常是記憶體。 ...
  • 使用 RegexString.with(string).pattern(pattern).start() + 後續操作(matches,find或者是replace) 源碼 示例 ...
  • 經過了一段時間的學習,慢慢的計入到了python的列表、元組的學習了,這一部分是後面函數的基礎,這也是無論何種語言都要學習的部分。其實過程很辛苦,不過對於小白的我不見得是一件壞事,反正都看不懂,倒也沒有什麼心理負擔。想想學成後的一覽眾山小,此時的積累,便是每一步都要堅實的。 列表、元組 列表是我們最 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...