Python(13)-函數,lambda語句

函數

  • 1 函數定義
  • 2 函數調用
  • 3 函數注釋文檔
  • 4 函數參數
    • 4.1 參數列表,默認參數,任意參數
      • 4.1.1 無缺省值參數
      • 4.1.2(部分)缺省值參數
      • 4.1.3 數量不定形參數
    • 4.2 可變對象和不可變對象
    • 4.3 作用域
      • 4.3.1 globals()函數
      • 4.3.2 global 聲明變量為全局變量
  • 5 函數返回值
    • 5.1返回單個值
    • 5.2返回多個值
  • 6 函數的嵌套調用
  • 7 函數的遞歸
  • 8 lambda語句

函數:有獨立功能的代碼塊,組織(封裝)成為小模塊,有需要的時候調用。

自己編寫第三方庫:封裝,修改功能代碼塊,增加函數定義,在其他程序中導入自己寫的函數,來使用函數中的功能。

1 函數定義

定義一個函數的語法:

def 函數名():

函數封裝的代碼

def test1():

print(‘hello world’)

函數中變量的命名規則與變量命名的規則相同

2 函數調用

定義好一個函數之后只是表明封裝了一段代碼,如果不調用函數函數是無法主動執行的。在函數名之后加一個小括號就能夠完成函數調用工作。

帶參數函數調用: 在函數名后按照定義變量的順序依次填寫實際要計算的參數。

Python不能在函數定義之前用函數名調用函數

3 函數注釋文檔

給Python中的函數添加注釋 函數上方保留兩個空行,函數的注釋在函數定義下方第一行,三個引號,填寫注釋內容。
在這里插入圖片描述
在這里插入圖片描述
在函數調用出:View-》quick document快速文檔(ctrl+q)->查看函數的注釋說明信息。
在這里插入圖片描述
在pycharm 文檔注釋解釋函數功能基礎上,要求同時顯示參數說明
文檔注釋的模板:在“”“后面寫 函數作用,在每個參數后寫參數的含義
在這里插入圖片描述
在這里插入圖片描述

4 函數參數

參數:函數內部需要處理函數外部數據時,可以通過參數傳遞
函數的參數用以增加函數的通用性。

函數的參數類型:形參和實參
定義函數時的參數:形參,告訴使用者,要傳兩個參數,在函數內部當變量使用。
調用函數時的參數:實參,實實在在的參數。

示例函數:Sum_2_num() -實現兩個數字求和,把需要計算的數字,通過參數的形式傳遞給函數。在括號里填寫參數,多個參數之間用逗號分隔。
在這里插入圖片描述

4.1 參數列表,默認參數,任意參數

4.1.1 無缺省值參數

def sum_2_num(num1,num2):…

4.1.2(部分)缺省值參數

(參數帶默認值)

def sum_2_num(num1,num2=1):…

函數定義時,給參數設定默認值,當函數有外部參數傳入時,使用傳入的實參,沒有參數傳入時使用缺省值
好處: 簡化常用情況下的參數傳遞
使用情況: 常見的值設為參數的默認值,不傳遞參數就能會調用默認值

定義參數的缺省值:在參數名后面加=加默認值就可以了。在指定缺省參數的默認值時,應該使用最常見的值作為默認值

注意事項:
a).定義位置:缺省參數應該放在參數列表的末尾,
b).調用多個缺省參數的函數:利用變量名=變量值來傳遞參數,避免傳遞位置錯誤

gl_list=[6,3,9]
#默認按升序排序,日常升序多
#gl_list.sort()
#如果需要降序排列,要指定reverse參數
gl_list.sort(reverse=True)
print(gl_list)

4.1.3 數量不定形參數

一個函數需要處理的參數個數是不確定的,這個時候可以使用多值參數來定義該函數。
多值參數好處:調用函數會比較方便。兩種方式定義多值參數的方法:
a).參數名前面+*
b).參數名前面+**

*args
**kwargs

def sum_numbers(num1, *numbers):print(num1, numbers)        # 1 (2, 3, 4)s = num1for val in numbers:s += valprint(s)                    # s = 10sum_numbers(1,2,3,4)

使用元組和字典傳遞數量不定的參數,拆包操作

def demo(*args,**kwargs):print(args)print(kwargs)gl_nums=(1,2,3)
gl_dict={"name":"xiaoming","age":18}demo(gl_nums,gl_dict)
#輸出:
#((1, 2, 3), {'age': 18, 'name': 'xiaoming'})
#{}#拆包,
demo(*gl_nums,**gl_dict)
#等價于
demo(1,2,3,name="xiaoming",age=18)

注意:在函數中,參數在使用前必須被賦值。

4.2 可變對象和不可變對象

python 中的所有對象分為可變對象和不可變對象。所謂可變對象指的是,對象的內容可變,而不可變對象的內容不可變化。

不可變對象數值類型,字符串,元組
可變對象字典,列表

Python 參數都是對對象引用。如果在函數內部,嘗試修改不可變對象,程序會在函數中生成新的對象,函數外被引用的對象則不會被改變。

1.函數內部,使用賦值語句操作不可變類型的實參,不會改變函數外的相對應的參數值

def demo(num,num_list):print("內部的代碼")# 函數內部,對參數的賦值語句num = 100num_list=[1,2,3]print(num)print(num_list)print("函數執行完成")
gl_num=99
gl_list=[4,5,6]
demo(gl_num,gl_list)
print(gl_num)
print(gl_list)

輸出

內部的代碼
100
[1, 2, 3]
函數執行完成
99
[4, 5, 6]

2.函數內部,使用賦值語句操作可變類型的實參,會改變函數外的相對應的參數值

def changeable(list):list[0] = 2print(list)
lis = [1, 2, 3]
print(lis)
changeable(lis)
print(lis)

輸出:

[1, 2, 3]
[2, 2, 3]
[2, 2, 3]

3.在函數內部使用可變類型的數據的方法,會改變外部實參。

def demo(num_list):print("函數內部的代碼")#使用方法修改列表的內容,在函數內部使用方法是沒有智能提示的num_list.append(9)print(num_list)print("函數執行完成")
gl_list=[1,2,3]
demo(gl_list)
print(gl_list)

輸出:

函數內部的代碼
[1, 2, 3, 9]
函數執行完成
[1, 2, 3, 9]

4.列表使用+=本質上是調用extend方法:可以把另外一個列表的內容加到當前列表下。

數字、字符串,使用+=先相加再賦值,列表+=會改變函數外面的變量:

def demo(num,num_list):print("函數開始")# num=num+num,不會改變外面實參num+=num# 調用方法,會改變外面是實參num_list+=num_listprint(num)print(num_list)print("函數完成")gl_num=9
gl_list=[1,2,3]
demo(gl_num,gl_list)print(gl_num)
print(gl_list)

使用等價的語句則不會:

def demo(num,num_list):print("函數開始")# num=num+num,不會改變外面實參num+=num# 賦值語句,不會改變外面實參#num_list=num_list+num_listprint(num)print(num_list)print("函數完成")

4.3 作用域

python在創建、改變、查找變量名時都是在命名空間中進行的,即在相應的作用域下進行的。Python不能聲明變量,當變量初始化處就決定了這個變量存在于哪個作用域中。

默認情況下:函數中定義局部變量,主程序中定義全局變量。函數內部可以使用全局變量。

4.3.1 globals()函數

在函數內部,也可以使用globals函數訪問全局變量。

x = 1
def print_x():x = 2print(globals()["x"])print(x)
print_x()

輸出

1
2

4.3.2 global 聲明變量為全局變量

def defin_gx():global gx     # 注意啦注意啦,下面使用的gx 使用的是全局變量哈gx = 3 
gx = 1
defin_gx()
print(gx)

輸出

3

5 函數返回值

一個函數執行結束后,告訴調用者執行的結果。使用 return關鍵字返回執行結果,可以使用一個變量來接受返回的結果。
在這里插入圖片描述
在return語句后的函數語句是無法到達的,所以,return語句應該作為函數的最后一句話
在這里插入圖片描述

5.1返回單個值

return num

5.2返回多個值

返回多個結果(函數返回當前的溫度和濕度)

def measure():#測量溫度和濕度print("測量開始")temp=39wetness=50print("測量結束")# 元組-可以多個數據,因此可以使用元組讓函數一次性返回多個值# 如果返回的數據類型是元組,小括號可以省略,否則有小括號提示#return (temp,wetness)return temp,wetness#元組。從元組中拿到單獨的數據
result=measure()
#需要拿到溫度和濕度,
print(result[0])
print(result[1])#如果函數返回的類型是元組,同時希望單獨處理元組中的元素
#可以使用多個變量,一次性接受函數 的返回值
#注意使用多個變量接受結果時,變量的個數應該和元組中元素的個數保持一致
gl_temp,gl_wetness=measure()
print(gl_temp)
print(gl_wetness)

6 函數的嵌套調用

一個函數中嵌套另外一個函數

 
def test1():print('1' * 50)def test2():print("-" * 50)test1()print("+" * 50)test2()

**溫馨提示:**項目出現新的需求時,不要急著改變已經測試好的程序,另求他法,盡可能不要在原有的函數或者模塊中改動,因為要求可能還會變回去。

7 函數的遞歸

一個函數數的遞歸:自己調用自己
特點:
1.要傳入參數,是會根據參數的不同做不同處理,
2.遞歸一定要有一個出口,沒有出口會出現死循環

遞歸執行流程:每次遞歸調用的核心就是處理的參數會改變。
案例演練:接收數字num,完成1+2+num用遞歸完成。遍歷整個文件目錄,遞歸算法編寫出來的十分有效果

def sum_num(num):# 出口if num==1:return 1# 數字累加#假設sum_number能夠完成1...num-1之間的累加temp=sum_num(num-1)return num+tempresult=sum_num(5)
print(result)

8 lambda語句

lambda用于創建匿名函數。對于一些抽象的、不會在其他地方復用的函數,可以使用lambda語句使代碼變得精簡。

# lambda表達式
g = lambda x : x + 1
print(g(1))

冒號左邊是函數的參數,有多個參數使用逗號分割開。
冒號右邊是返回值,只能有一個返回值,包含實際計算操作

注意lambda語句只有一個返回值一個表達式,不能含有命令。

demo: lambda語句實現任意底數的函數

from math import log
def make_logarithmic_function(base):return lambda x:log(x, base)
my_lf = make_logarithmic_function(base=3)print(my_lf(9))

輸出

2.0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445299.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445299.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445299.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習(08)-- Residual Network (ResNet)

文章目錄目錄1.殘差網絡基礎1.1基本概念1.2VGG19、ResNet34結構圖1.3 梯度彌散和網絡退化1.4 殘差塊變體1.5 ResNet模型變體1.6 Residual Network補充1.7 1*1卷積核(補充)2.殘差網絡介紹(何凱明)3.ResNet-50(Ng)3.1 非常深的神經網…

Python(14)-模塊

模塊Python標準庫,第三方庫都是一個個模塊,我們還可以編寫自己的模塊。模塊python程序架構的核心模塊,模塊是一個工具包。 每一個以.py為擴展名的源代碼文件都是一個模塊。 想要使用工具包中的工具,可以使用Import的方式導入。 …

redis——命令請求的執行過程

發送命令請求 當用戶在客戶端中鍵入一個命令請求時, 客戶端會將這個命令請求轉換成協議格式, 然后通過連接到服務器的套接字, 將協議格式的命令請求發送給服務器。 讀取命令請求 當客戶端與服務器之間的連接套接字因為客戶端的寫入而變得可…

深度學習(09)-- DenseNet

文章目錄目錄1.DenseNet網絡結構2.稠密連接及其優點3.代碼實現4.補充說明目錄 1.DenseNet網絡結構 2.稠密連接及其優點 每層以之前層的輸出為輸入,對于有L層的傳統網絡,一共有L個連接,對于DenseNet,則有L*(L1)/2。 這篇論文主要…

redis——緩存擊穿/穿透/雪崩

緩存穿透 一般的緩存系統,都是按照key去緩存查詢,如果不存在對應的value,就去后端系統查找(比如DB)。 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對后端系統造成很大的壓力。這就叫做緩存穿透…

python(15)-window7配置iPython

前提:安裝了Pythonanaconda anaconda安裝參考:https://www.zhihu.com/question/58033789 在window系統下可以使用兩種方法來實現類似與于Linux終端命令運行程序的方法(推薦方式2): 1.cmd:自己沒有操作過,可以參考下面…

深度學習(10)-- Capsules Networks(CapsNet)

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 https://blog.csdn.net/malele4th/article/details/79430464 </div><div id"content_views" class"markdown_views"><!-- flowchart 箭頭圖標 勿刪 --&g…

手把手maven的功能/安裝/使用/idea集成

看這篇文章不用著急安裝&#xff0c;跟著步驟一定會成功&#xff0c;要理解maven是什么&#xff0c;如何使用。 介紹 maven官網 對于一個小白來說&#xff0c;官網有用的信息就是這些 不管如何介紹maven&#xff0c;作為使用者來說&#xff0c;主要感覺兩個方面有幫助&#x…

python(16)-列表list,for循環

高級數據類型--列表1列表定義2列表中取值3列表的增&#xff0c;刪&#xff0c;查&#xff0c;改3.1修改指定位置的數據3.2確定指定元素的索引3.3增加操作3.4刪除操作3.5 元素是否存在與列表中 in3.6在指定索引位置插入元素4列表的數據統計5列表排序6列表的循環遍歷-for7多維度l…

深度學習(11)-- GAN

TensorFlow &#xff08;GAN&#xff09; 目錄 TensorFlow &#xff08;GAN&#xff09;目錄1、GAN1.1 常見神經網絡形式1.2 生成網絡1.3 新手畫家 & 新手鑒賞家1.4 GAN網絡1.5 例子 1、GAN 今天我們會來說說現在最流行的一種生成網絡, 叫做 GAN, 又稱生成對抗網絡, 也…

Python外(1)--try-expect

語法&#xff1a; try:正常情況下執行的代碼塊 expect 錯誤類型1:&#xff08;可選&#xff09;錯誤類型1對應的處理方案 expect 錯誤類型2:&#xff08;可選&#xff09;錯誤類型2對應的處理方案 expect:剩下的錯誤類型對應的處理方案 else:&#xff08;可選&#xff09;沒有…

redis——數據結構和對象的使用介紹

redis官網 微軟寫的windows下的redis 我們下載第一個 額案后基本一路默認就行了 安裝后&#xff0c;服務自動啟動&#xff0c;以后也不用自動啟動。 出現這個表示我們連接上了。 redis命令參考鏈接 String 字符串結構 struct sdshdr{//記錄buf數組中已使用字節的數量int …

Python模塊(1)-Argparse 簡易使用教程

argparse 簡易使用教程1.概況2. action3. argparse 使用demo3.1 argparse 實現加法器3.2 D-Model parser1.概況 argparse是Python中用于解析命令行參數的一個模塊&#xff0c;可以自動生成help和usage信息&#xff1b;當從終端輸入的參數無效時&#xff0c;模塊會輸出提示信息…

深度學習--Keras總結

Keras主要包括14個模塊&#xff0c;本文主要對Models、layers、Initializations、Activations、Objectives、Optimizers、Preprocessing、metrics共計8個模塊分別展開介紹&#xff0c;并通過一個簡單的Bp神經網絡說明各個模塊的作用。 1. Model 包&#xff1a;keras.models …

redis——NOSQL及redis概述

NoSql入門概述 單機Mysql的美好時代 瓶頸&#xff1a; 數據庫總大小一臺機器硬盤內存放不下數據的索引&#xff08;B tree&#xff09;一個機器的運行內存放不下訪問量&#xff08;讀寫混合&#xff09;一個實例不能承受Memcached&#xff08;緩存&#xff09; MySql 垂直拆…

Python(17)-元組tuple

高級數據類型--元組1.元組的定義2.元組基本操作3.元組的循環遍歷4.元組的應用場景5.元組與格式化字符串6.元組與列表之間的轉換元組的最大特征就是可訪問不可改&#xff0c;可作為字典的鍵值&#xff0c;因為鍵值必須是唯一的。字符串也是不可邊類型&#xff0c;因此也適合做字…

深度學習(莫煩 神經網絡 lecture 3) Keras

神經網絡 & Keras 目錄 神經網絡 & Keras目錄1、Keras簡介1.1 科普: 人工神經網絡 VS 生物神經網絡1.2 什么是神經網絡 (Neural Network)1.3 神經網絡 梯度下降1.4 科普: 神經網絡的黑盒不黑1.5 Why Keras?1.6 兼容 backend 2、如何搭建各種神經網絡2.1 Regressor回歸…

阿里Java編程規約(集合)

【強制】關于 hashCode 和 equals 的處理&#xff0c;遵循如下規則&#xff1a; 1&#xff09; 只要覆寫 equals&#xff0c;就必須覆寫 hashCode。 2&#xff09; 因為 Set 存儲的是不重復的對象&#xff0c;依據 hashCode 和 equals 進行判斷&#xff0c;所以 Set 存儲的對…

Pytorch(3)-數據載入接口:Dataloader、datasets

pytorch數據載入1.數據載入概況Dataloader 是啥2.支持的三類數據集2.1 torchvision.datasets.xxx2.2 torchvision.datasets.ImageFolder2.3 寫自己的數據類&#xff0c;讀入定制化數據2.3.1 數據類的編寫map-style范式iterable-style 范式2.3.2 DataLoader 導入數據類1.數據載入…

阿里Java編程規約(控制語句)

【強制】在一個 switch 塊內&#xff0c;每個 case 要么通過 continue/break/return 等來終止&#xff0c;要么 注釋說明程序將繼續執行到哪一個 case 為止&#xff1b;在一個 switch 塊內&#xff0c;都必須包含一個 default 語句并且放在最后&#xff0c;即使它什么代碼也沒…