零基礎怎么學好函數,Python基礎__函數

 2023-11-19 阅读 20 评论 0

摘要:  本節將進入函數的介紹,函數是Python基礎中最精彩的部分之一,接下來將對函數做詳細介紹。函數   函數就是對代碼進行一個封裝。把實現某一功能的代碼進行封裝到一起。下次需要使用時不需要進行編寫代碼直接調用即可好處:   增加代碼的重復性

  本節將進入函數的介紹,函數是Python基礎中最精彩的部分之一,接下來將對函數做詳細介紹。
函數
  函數就是對代碼進行一個封裝。把實現某一功能的代碼進行封裝到一起。下次需要使用時不需要進行編寫代碼直接調用即可
好處:
  增加代碼的重復性,增加代碼的可讀性,減少代碼的編寫量,降低維護成本
  函數可以看成解決某類問題的工具
1.函數的定義:

def <name>(arg1,arg2,...,argN):<statements>

  def的首行定義了函數名,賦值給了函數對象,并在括號中包含了0個或以上的參數。在調用的時候,在首行的參數名賦值給了括號中的傳遞來的對象。函數的主體往往都包含了return語句。

def <name>(arg1,arg2,...,argN):<statements>
return <value>

零基礎怎么學好函數、Python的return語句可以在函數主體中的任何地方出現。它表示函數調用的結束,并將結果返回至函數調用處。return語句包含一個對象表達式,這個對象給出的函數的結果。return語句是可選的,如果沒有出現,則函數自動返回None

#例子
def Diedai(iter):for i in iter:print(i)    

函數的定義命名:駝峰規則.
2.傳遞參數
參數傳遞的一些簡要的關鍵點
參數的傳遞是通過自頂將對象賦值給本地變量名來實現的。函數參數(調用者發送的可能的共享對象引用值)在實際中只是Python賦值的另一個實例而已。因為引用是以指針的形式實現的,所有的參數實際上都是通過指針進行傳遞的。
在函數內部的參數的賦值不會影響調用者。在函數運行時,在函數頭部的參數名是一個新的、本地的變量名,這個變量名是函數的本地作用域內的。函數參數名和調用者作用域的變量名是沒有別名的
改變函數的可變對象參數的值也許會對調用者有影響。因為參數是簡單地復制傳入的對象,函數能夠就地傳入可變對象,因此其結果會影響調用者。可變參數對于函數來說是可以做輸入和輸出的

***不可變參數是通過值進行傳遞的
***可變對象是通過‘指針’進行傳遞的參數的共享與引用:

def f_1(a):return(a)
>>> b=90
>>> f_1(b)
90

導函數,在調用函數f_1(b)的時候,變量a賦值了對象90,但是,a只是存在于調用的函數之中,在函數中修改a對調用函數的地方沒有任何影響,它直接把本地變量a重置為一個完全不同的對象。
沒有名稱沖突指的是對函數中的一個參數名的賦值(例如a)不會影響到函數作用域中的b的一個變量

def changer(a,b):a=2b[0]='Python'return(a,b)
>>> X=1
>>> L=[1,2]
>>> changer(X,L)
(2, ['Python', 2])
>>> X,L
(1, ['Python', 2])

changer函數給參數a賦值,并給參數b所引用的一個對象賦值。
因為a是在函數作用域的本地變量名,第一個賦值對函數調用者沒有影響,它僅僅把本地變量a修改為一個完全不同的對象,并沒有改變調用者作用域中的名稱X的綁定。
b也是一個本地變量名,但是它被傳給了一個可變對象(在調用者作用域中叫做L的列表)。因為第二個賦值是在原處發生變化的對象改變,對函數中b[0]進行賦值的結果會在函數返回后影響L的值
這里:X與a共享一個對象,L與b共享一個對象

參數類型:

函數連續的條件?1.不傳參數

def Fun():print('不能傳參數')

2.必備參數
默認參數 不傳參數時默認參數為2,若傳參數則默認參數被覆蓋

def fun3(b=2):print('默認參數:',b) #可傳可不傳

可選參數  

def fun4(*arg):print('可傳0個或多個:',arg) # 可傳0個或多個,包裝成元組
#fun(*[1,2]) 加個*,就把里面的元素解包,轉化為元組。注意:若是字典只取鍵  

python函數,關鍵字參數

def fun5(a,b): # 定義的時候是跟必備參數一樣的print(a,b) # 必須放到最后,通過函數名進行匹配
def fun6(**kwarg):print('關鍵字參數',kwarg) #包裝成字典
#fun6(a=1,b=2) 遵守變量命名規則
#fun6(**{'a':1}) 關鍵字必須是字符串

參數混合的時候 #關鍵字參數放到最后 根據定義的順序 確保必備參數能拿到值且只能拿到一個

def fun7(a,b=1): #必備參數+默認參數print(a,b) #默認參數必須放在必備參數的后面def fun8(b,m=1,*a):print(b)print(m)print(a)
def fun9(*a,b,m):print(a,b,m)    

注意:

函數的定義域。  在函數的調用中,簡單的通過變量名位置進行匹配,但是使用name=value的形式告訴Python依照變量名進行匹配,這些叫做關鍵字參數。在調用中使用*arg或者**kwarg允許我們在一個序列或字典中相應的封裝任意多的位置相關或關鍵字的對象,并且在它們傳遞給函數的時候,將它們解包為分開的、單個的參數。

  在簡單的變量名是通過位置或變量名進行匹配的(取決于調用者是如何進行傳參的),但是name=value的形式定義默認了參數值。*name的形式收集了任意的額外的 不匹配的參數到元組中,**name的形式將會收集額外的關鍵字參數到字典中。

  關鍵字參數必須放到最后

函數的概念,三.內置函數

查看內置函數:dir(__builtins__)
min: min([1,2,3])
max: max([1,2,3])
sum: sum([1,2,3],2) # 表示從2開始加
bin() : 轉化為二進制
oct(): 轉化為八進制
hex(): 轉化為十六進制
ord(‘a’) #97: 轉化為對應的ascII碼
chr(97) #'a'

補充:

enumerate([1,2,3])
list(enumerate([1,2,3])): #返回一個枚舉對象
>>> dict(enumerate([1,2,3,4]))
{0: 1, 1: 2, 2: 3, 3: 4}
>>> list(enumerate([1,2,3,4],2))
[(2, 1), (3, 2), (4, 3), (5, 4)]

filter(function or None, iterable) --> filter object :
過濾器,第一個參數是一個函數相當于過濾體;
第二個參數是過濾的對象,可迭代對象

>>> list(filter(lambda x:x>1,[1,2,3]))
[2, 3]

map(func, *iterables) --> map object 加工

>>> list(map(lambda x:x>2,[2,3,4,5]))
[False, True, True, True]

zip(iter1 [,iter2 [...]]) --> zip object 配對

>>> list(zip(([1,2,3]),['a','b','c']))
[(1, 'a'), (2, 'b'), (3, 'c')]

四.作用域

  當我們在一個程序中使用變量名時,Python創建、改變或查找變量名都是在所謂的命名空間中I(一個保存變量名的地方)進行的。當我們談論到搜索變量名對應代碼的值的時候,作用域這個術語指的就是命名空間。即代碼中變量名被賦值的位置決定了這個變量名能被訪問到的范圍

?作用域需要注意的幾點:

  一個在def內定義的變量名能夠被def內的代碼使用,不能在函數外部引用這樣的變量名

  def之中的變量名與def定義之外的變量名并不沖突,即使是在別處使用相同的變量名。一個在def之外被賦值的變量X與在這個def之中賦值的變量X是完全不同的變量。

作用域的類型

局部變量:變量在函數內部定義,變量的作用域在函數內部
全局變量:變量在函數外部定義,變量的作用域是全局

global: 用來在函數或其他局部作用域中,聲明全局變量(作用于全局)
nonlocal:用來在函數或其他作用域中,聲明外層(非全局)變量(作用于局部)

使用global變量的情況:
全局變量可以在函數內部訪問,但是不能直接改變
如果在函數內部想要修改局部變量,可以用global來修飾變量

局部變量只能在局部進行訪問和修改
如果在函數外部想訪問局部變量,也可以用global,將局部變量生命為全局變量

使用nonlocal的情況:
當里層局部,需要修改外層局部時,需要用nonlocal聲明.(如嵌套函數)

x=1 # 全局變量
def fun():
y=2 # y是局部類變量,外部不能用
# x+=1 函數內部不能做直接修改全局變量
global x #若要修改,需要授權
x+=1
global z
z=3
print(x,y,z)
def f1():
global x
x+=1
print(x)##練習
def f2():
q=1 #局部變量,外層
print('局部外層',q)
def f3():
w=33 #局部變量,里層
nonlocal q
q+=1
print(q)
print('局部里層',w)
f3()

作用域法則 :

  內嵌的模塊是全局作用域

  全局作用域的作用范圍僅限于單個文件

  每次對函數的調用都創建了一個新的本地作用域

  賦值的變量名除非聲明為全局變量或非本地變量,否則均為本地變量

?

轉載于:https://www.cnblogs.com/fangfang31140519/p/8471283.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/179591.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息