Python自定義函式需要注意的問題

2021-09-26 08:49:57 字數 4075 閱讀 1532

python自定義函式需要注意的問題:

1.縮排。乙個語句塊要用相同的縮排,兩個縮排相同的邏輯行可以看做可以並列的關係,不可能是所屬關係。

return需要跟for對齊,否則

2.遍歷。range(n) 代表的是從0開始,遍歷到n-1,步長為1

range(1,n+1) 代表從1開始,遍歷到n 步長為1

range(1,n+1,2)代表從1開始,遍歷到n 步長為2、

3.自定義函式後可以返回乙個值(return)

return保留字用來傳遞返回值

函式可以有返回值也可以沒有

可以有return 也可以沒有

4.雙引數可變引數傳遞 b表達不確定的因素

如果 for j in n

#加上代表不確定給的數值,但是不加會返回錯誤,會把n看做int型別

如果for range in(1,n)

則不需要加,示例如下

定義了2個引數 但是給了3個值????不確定怎麼處理

6.區域性變數與全域性變數

基本資料變數

規則一:區域性變數和全域性變數是不同的變數

區域性變數是函式內部的佔位符 與全域性變數可能重名但不同

函式運算結算後 區域性變數被釋放

用global在區域性變數中使用全域性變數—宣告

n,s=10,100 *****— ns為全域性變數

def fact(n): *****— 區域性變數

s=1 *****—區域性變數

for i in range(1,10): 區域性變數

s*=i *****— 區域性變數

return s *****—區域性變數

print(fact(n),s) *****— 此時s是全域性變數

》362880100

注意:fact(n) 只有被return才能被傳遞

如果不return print(fact(n))為none

如果在函式內部使用全域性變數 用global

n,s=10,100 *****— ns為全域性變數

def fact(n): *****— 區域性變數

*global s *****—全域性變數*

for i in range(1,10): 區域性變數

s*=i *****— 區域性變數

return s *****—區域性變數

print(fact(n),s) *****— 此時s是全域性變數

》3628800036288000

規則二:區域性變數是組合資料型別並且未建立,等同於全域性變數

ls=[「f」,「f」]

return

func(1)

print(ls)

》[『f』, 『f』, 1]

因為ls在函式中沒有真實建立 所以 在函式中的ls等於全域性變數

但是如果在函式中真實建立了ls 則返回的是全域性變數 見下例

ls=[「f」,「f」]

def func(s):

ls= 真實建立了ls

總結:如果組合資料型別在函式中被真是建立 則不同於全域性變數 如果函式結束 區域性變數即被釋放。如果組合型別沒有真實建立 則等同於全域性變數

7、lambda函式

能夠返回函式名作為結果

lamda 保留自定義 函式名是返回結果

lamda 引數:表示式

f=lamda x,y:x+y

f(1,2)

3

應用:一般使用 def return 謹慎使用lambda 主要用於特定函式或方法的引數有固定使用方式

單元小結:

def 定義函式 lambda定義匿名函式

可選引數 注意 定義時要賦予初值 名稱的引數傳遞

return 返回多個結果

保留字global宣告全域性變數

基本資料型別和組合資料型別的規則

sum = lambda x,y:x+y

sum(6+9)

filter 函式

功能: filter的功能是過濾掉序列中不符合函式條件的元素,當序列中要刪減的元素可以用某些函式描述時,就應該想起filter函式。

呼叫: filter(function,sequence),function可以是匿名函式或者自定義函式,它會對後面的sequence序列的每個元素判定是否符合函式條件,返回true或者false,從而只留下true 的元素;sequence可以是列表、元組或者字串。

例子:x = [1,2,3,4,5]

list(filter(lambda x:x%2==0,x)) # 找出偶數。python3.*之後filter函式返回的不再是列表而是迭代器,所以需要用list轉換。

[2, 4]

map 函式

功能: 求乙個序列或者多個序列進行函式對映之後的值,就該想到map這個函式,它是python自帶的函式,在python3.*之後返回的是迭代器,同filter,需要進行列表轉換。

呼叫: map(function,iterable1,iterable2),function中的引數值不一定是乙個x,也可以是x和y,甚至多個;後面的iterable表示需要參與function運算中的引數值,有幾個引數值就傳入幾個iterable。

例子:x = [1,2,3,4,5]

y = [2,3,4,5,6]

list(map(lambda x,y:(x*y)+2,x,y))

[4, 8, 14, 22, 32]

reduce 函式

功能: 對乙個序列進行壓縮運算,得到乙個值。但是reduce在python2的時候是內建函式,到了python3移到了functools模組,所以使用之前需要 from functools import reduce

呼叫: reduce(function,iterable),其中function必須傳入兩個引數,iterable可以是列表或者元組

例子:x=[1,2,3,4,5]

from functools import reduce

reduce(lambda x,y: x+y, x)

例子:import numpy as np

import pandas as pd

a = np.random.randint(low=0,high=4,size=(2,4))

data = pd.dataframe(a)

想知道當前程式或是程序執行到某個地方時,記憶體裡有哪些變數,獲取他們的name 列表:

dir()

刪除單個變數

del x # 刪除變數 x

自定義 LayoutManger需要注意的幾個地方

最近寫銷控表,需要有上萬個資料 的情況,首先感謝 的帖主,給了大家乙個非常好的例子。本文也是根據他的帖子的原理,整理了自己在編寫銷控表的時候遇到的問題。很多demo 在onlayoutchildren 方法中 進行兩個動作,乙個是計算得到真實的最大寬高,乙個是進行layout的動作,我的觀點,一旦外...

STL自定義排序函式 需要注意的問題

1.例子 先舉個例子 分析一下程式的執行結果 看看在三種情況下程式的輸出分別是什麼,有可能出現異常 pragma once include include 下面是三個自定義的謂詞函式,排序演算法將分別使用這三個函式 bool compare int a,int b bool compare1 int...

自定義Cell需要注意的問題

使用xib建立cell時需要在設定單元格樣式時使用 nsbundel mainbundel loadnibname xib的檔名 owner self option nil 0 來初始化單元格 而使用純手寫 時,需要使用init方法來初始化cell上的控制項,來避免單元格重影問題,而xib不會出現重...