python long函式 python函式

2021-10-11 15:12:03 字數 3872 閱讀 2276

一.函式的優點

使**模組化

**復用,減少冗餘

保證了**的一致性

python中的函式分為內建函式和自定義函式

內建函式: 如int(), str(), len(), range(), id(), max(), print()等,所有的內建函式參考

本章節來說說自定義函式的定義和使用

二.函式的定義和呼叫

定義格式:

def 函式名(引數列表):

語句1語句2

引數列表可以為空,但是括號不能省略

理解形參,實參,位置引數,關鍵字引數

#無參定義

def say_hello(): #函式定義

print("hello dear.")

say_hello()#函式呼叫

#帶有引數的定義

def get_max(a, b): #形參(形式引數)

if a >b:print(a)else:print(b)

get_max(3, 5) #傳遞實參,與形參位置對應,個數也與形參相對應,會按順序傳參(位置引數)

get_max(b=5, a=12) #關鍵字引數呼叫,這裡就可以與引數順序無關了

輸出結果

hello dear.5

預設值引數:就是不傳引數,會用預設的值,傳了引數的就會使用傳的引數

def connect_mysql(host, user, password, port=3306): #port=3306為預設引數

pass #pass就類似乙個佔位符,保證函式完整,沒有語法錯誤

host= input("input host:")

user= input("input user:")

password= input("password")

connect_mysql(host, user, password)#不用再傳port的值的,預設就是3306;也可以傳乙個新的值替代3306

可變長引數:引數的個數不確定,理論上有無限多個,但一般不會超過6或7個

#可變長引數

def get_sum(*num): #求和,引數名前面加*(變數名可以自定義)就可以定義為可變長引數

summ =0for i innum:

summ+=ireturnsummprint(get_sum(1, 2, 3, 4, 5, 6, 7, 8, 9))def print_alpha(*args): #列印字串

for i inargs:print(i)

print_alpha("a", "b", "c")

輸出結果45abc

多個關鍵字引數轉字典

def test(**kwargs): #**兩個後面加變數(變數名可以自定義),這樣後面傳多個值(需要傳關鍵字引數),並且結果為字典

print(kwargs)

test(name="zhangsan", age=18, gender="m")def people(name, *args, age=18, **kwargs):print(name)print(args)print(age)print(kwargs)

people("zhangsan", "man", 25, salary=20000, department="it")

people("zhangsan", "man", 180, age=25, salary=20000, department="it")

people("zhangsan", "man", 180, 25, salary=20000, department="it")

三.函式返回值

函式的功能是單一的,乙個函式只完成乙個功能

呼叫函式時,函式執行完成會有乙個執行結果,將執行結果返回給呼叫者,函式使用return關鍵字

當執行到return時,說明函式執行完成,會退出函式

deftest(a, b):

c= a +breturncprint("haha") #返回值後面的**不執行,也就是說函式執行到return就結束了

test(1, 2) #再回顧一下,這是函式的呼叫,執行函式體內的**,但這樣得不到函式返回值

d= test(1, 2)print(d) #這樣終於得到函式的返回值了

print(test(1,2)) #不賦值給變數,直接列印也是可以得到函式的返回值

四.變數的作用域

區域性變數和全域性變數

name = "zhangsan" #全域性變數

defchange_name():

name= "lisi" #這個變數只能在函式內生效,也就是區域性變數(可以說這個函式就是這個變數的作用域)

gender = "male"change_name()print(name) #結果為zhangsan

print(gender) #這句會報錯,因為它是區域性變數,在外面呼叫不了

name = "zhangsan" #全域性變數

defchange_name():global name,gender #這句可以把name改為全域性變數,但不建議這樣用,如果多次呼叫函式,這樣很容易混亂,容易與外部的變數衝突

name = "lisi"gender= "male"

print(name)

change_name()#這句結果為lisi,呼叫函式內部的print(name)得到的結果

print(name) #這句結果為lisi

print(gender) #可以呼叫gender變數了,能列印出結果

五.裝飾器

定義乙個簡單的裝飾器

'''裝飾器:就是把乙個函式作為引數,返回乙個加強版的函式,實質就是乙個返回函式的函式

可用於修改一些函式的功能,但是不能修改原函式'''

#example 1

def add(a, b): #只有求和的功能

print(a+b)def poweradd(func): #poweradd為乙個裝飾器,返回乙個新函式inner,新函式是在add函式的基礎上加了新的功能

definner(a, b):print("hello world")

add(a, b)returninner

f=poweradd(add)print(type(f)) #

f(3, 6)

輸出結果hello world9

複雜一點的裝飾器,使用@符號

defouter(func):definner(name, age):if age <0:

age=0

func(name, age)#執行作為引數傳過來的函式

returninner#使用@符號作用於函式,相當於給函式加上裝飾器

@outer #相當於 myprint = outer(myprint)

defmyprint(name, age):print("{} is {} years old".format(name, age))#myprint = outer(myprint)

myprint("xiaoming", -12)

輸出結果

xiaomingis 0 years old

定義乙個通用的裝飾器,當傳遞多個引數時,也可以使用

defouter(func):def inner(*args, **kwargs):#在這裡新增新功能修飾傳入的函式

print("***********")return func(*args, **kwargs) #如果func函式有返回值則在這裡返回

returninner

@outerdefmyprint(name, age, ***):print("{} is {} years old,and is a {}".format(name, age, ***))

myprint("xiaoming", 23, "man")

輸出結果***********xiaomingis 23 years old,and is a man

python long型別 python 資料型別

python中有五種標準資料型別 numbers,string,list,tuple,dictionary 數字 1,數字型別是用於儲存數字的,是不可改變的 eg a 1 2,刪除物件 eg del a,b,c.3,資料型別 int,long,float,complex long 型別只存在於 py...

ElasticSearch查詢方法(python)

es.search index my index doc type test type 或者 body es.search index my index doc type test type body body term body 查詢name python 的所有資料 es.search inde...

robot framework自定義python庫

自定義python庫的好處 robot framework填表式,將python的靈活性弄沒了,但是不要擔心,rf早就想到了解決辦法,就是擴充自己的庫.1.在python應用程式包目錄下建立乙個新包 d python27 lib site packages newlibrary 這裡注意資料夾new...