python123编写函数求和_Python基础之函数
Python基礎之函數
一、函數基礎
1、函數概念:
函數是指將一組語句的集合通過一個名字(函數名)封裝起來,要想執行這個函數,只需調用其函數名即可
2、函數的作用
(1)減少重復代碼
(2)使程序變的可擴展
(3)使程序變得易維護
3、語法定義def?sayhi(x):???????????????#函數名
’’’函數說明’’’
print("Hello,?I'mnobody!")
return?x????????????????????#函數返回值
sayhi()?????????????????????#調用函數
關鍵字說明:
def:創建函數
sayhi():函數名
print("Hello, I'm nobody!"):函數體
return():返回值
sayhi()?#調用函數
4、函數的執行過程
定義函數,在程序執行過程中,函數體不執行,只有當程序調用函數時,函數才會執行。
函數執行過程:def?f1():
print(123)
return?"111"???#在函數中,一旦執行return,函數執行過程立即終止
print(456)
r?=?f1()???????????#只有調用函數時,函數才會執行
print(r)???????????#打印函數返回值
5、函數的返回值
(1)返回值數量為0時,返回None
(2)返回值數量等于1時,返回object
(3)返回值數量大于1時,返回tupledeftest():
print("first")
#沒有返回值
deftest2():
print("second")
return?2??????????????????????#返回值數量為1時
deftest3():
print("three")
return3,"dayi123",{"age":18,'name':"yiliu"}????#返回值數量多個時
one?=test()
two?=test2()
three=?test3()
print(one)
print(two)
print(three)
二、函數的參數
1函數的基本參數
(1)、普通參數
1)形參:變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數后則不能再使用該形參變量
2)實參:可以是常量、變量、表達式、函數等,無論實參是何種類型的值,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值def?send(xxoo,content):???????????????????#xxoo、content為實參
print(xxoo,content)
print("發送郵件成功:",xxoo,content)
return?True
send(dayi,?is)???????????????????????????#dayi、is為形參
(2)、默認參數def?send(xxoo,content,xx="ok"):?????#默認參數必須放在參數列表最后,可以有多個默認參數
print(xxoo,content,xx)
print("發送郵件成功:",xxoo,content,xx)
return?True
send('dayi','is')???????????????????#如果沒有傳參、則傳遞默認參數
send('dayi','is','niuB')??????????????#如果傳遞參數,則返回結果為傳遞參數
(3)、制定參數
默認傳遞的參數是根據順序,制定參數,可以打亂參數的順序:def?send(xxoo,content):
print(xxoo,content)
print("發送郵件成功:",xxoo,content)
return?True
send(content='dayi',xxoo='is')?????#將’dayi’傳遞給conttent,將‘is’換遞給xxoo
2、函數的動態參數
(1)、動態參數:傳參時可以傳一個或任意多個參數
1)、傳參時加一個”*”
作用:會將傳的參數放入元組中、
應用場景:傳的參數有順序def?fl(*args):??????????#?行參中帶*則表示動態參數
print(args,type(args))
fl(11)
li?=?[22,"dayi","liu"]
fl(li)?????????????????#?把?"li"當做一個整體傳到元組里面
fl(*li)????????????????#加"*"把li中元素傳到元組里面
fl(li,12)
li2?=?"dayi123"
fl(li2)????????????????#不帶*,將li2整體傳進元組,帶"*",將li2中每個字符串分別傳進元組
fl(*li2)
2)、傳參時加兩個”*”
作用:會將傳的參數放入字典中
應用場景:傳的參數沒有順序def?f1(**args):
print(args,type(args))
f1(n1="dayi123",n2=24)?????????????#傳參時必須傳兩個,一個“KEY”一個“value”
dic?=?{'name':"dayi",'age':18}
f1(kk=dic)?????????????????????????#傳參是把字典當做一個整體傳進字典中
f1(**dic)??????????????????????????#傳參時將字典中的每一個值分別傳進字典中
3)、傳參時既有兩個”*”,又有一個”*”
作用:萬能參數,既可以傳一個”*”的參數,又可以傳”**”的參數ef?f1(*args,**kwargs):
print(args,type(args))
print(kwargs)
f1(1,2,3,name="dayi",age=24)
tup?=?(22,33,44,55)
dic?=?{'name':"dayi123",'age':23}
f1(*tup,**dic)
f1(yz=tup,cd=dic)
(2)、利用動態參數實現format功能s1?=?"i?am?{0},age{1}".format("dayi123",18)
print(s1)
s2?=?"i?am?{0},age?{1}".format(*["dayi123",24])????????#傳遞列表中的參數,前面必須加“*”
print(s2)
s3?=?"i?am?{name},age?{age}".format(name="dayi123",age=24)
print(s3)
dic?=?{'name':'dayi123',"age":24}
s4?=?"i?am?{name},age?{age}".format(**dic)??????????????#將字典中參數傳遞給s4,必須加“**”
print(s4)
(3)、函數傳參傳遞的是引用def?f1(a1):
a1.append(999)?????#?函數傳參傳遞的是引用
li?=?[11,22,33,44]
f1(li)
print(li)
3、全局變量與局部變量
全局變量針對所有作用域均可讀,局部變量只針對部分作用域可讀,全局變量聲明要用大寫,全局變量可以是列表、字典。全局變量可以通過global修改,如果全局變量是字典、列表,則可以修改,但不能重新賦值。NAME?=?"alex"????????????#全局變量,所有作用域都可讀,全局變量的聲明要大寫
#NAME?=?[123,456,789]?????#如果全局變量是列表字典,則可以修改,但不可重新賦值
def?fl():
age?=?18
global?NAME????????#修改全局變量,對全局變量重新賦值,需要先global
NAME?=?"123"????????#局部變量,只對當前作用于生效
print(age,NAME)
def?f2():
age?=?19
print(age,NAME)
fl()
f2()
定義的字符串、數字格式的全局變量不能再局部變量中直接修改,但定義的列表,字典等全局變量可在局部變量中直接修改:names=?["dayi",18,"boy"]
defchange_name():
names[0]?=?"liu"
print("inside?func",names)
print(names)
change_name()
print(names)
例:用函數實現登錄功能def?login(username,password):
f?=?open("db",'r')?????????????#打開db.txt文件,’r’代表讀取
for?line?in?f:
line_list?=?line.split("|")?#一行一行讀取,使用“|”分隔
if?line_list[0]?==?username?and?line_list[1]?==?password:
return?True
def?register(username,password):
f?=?open("db",'a')?????????????#打開db.txt文件,’a’代表追加
temp?=?"\n"?+?username?+?"|"?+?password
f.write(temp)???????????????????#向db.txt中寫入
f.close()???????????????????????#關閉并生效
def?main():
t?=?input("1:登錄;2:注冊")
if?t?==?"1":
user?=?input("請輸入用戶名:")
pwd?=?input("請輸入密碼:")
r?=?login(user,pwd)
if?r:
print("登錄成功")
else:
print("登錄失敗")
elif?t?==?"2":
user?=?input("請輸入用戶名:")
pwd?=?input("請輸入密碼:")
register(user,pwd)
main()
同時,新建db.txt文件,輸入:dayi123|dayi123
三、三元(三目)運算及lambda表達式
1、三元運算if?1?==1:
name=?"liu"
else:
name=?"sb"
#等同于:
name?=?"liu"?if?1?==?1?else?"sb"
2、lambda表達式(匿名函數)def?f1(a1,a2):
return?a1?+?a2?+?100
ret?=?f1(10,12)
print(ret)
#等同于
f2?=?lambda?a1,a2:?a1?+a2?+?100
ret2?=?f2(10,12)
print(ret2)
3、中括號中的條件判斷以及循環舉例:a?=?range(10)
print([i?for?i?in?a?if?i<5])
輸出結果為: [0, 1, 2, 3, 4]
四、遞歸
1、遞歸:
遞歸算法是一種直接或者間接地調用自身算法的過程。在計算機編寫程序中,遞歸算法對解決一大類問題是十分有效的,它往往使算法的描述簡潔而且易于理解。
2、遞歸算法特點:
(1)遞歸就是在過程或函數里調用自身。
(2)在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
(3)遞歸算法解題通常顯得很簡潔,但遞歸算法解題的運行效率較低。所以一般不提倡用遞歸算法設計程序。
(4)在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等。所以一般不提倡用遞歸算法設計程序。
3、遞歸舉例——階乘def?func(num):
if?num?==?1:
return?1
return?num?*?func(num-1)
x?=?func(7)
print(x)
五.高階函數
變量可以指向函數,函數的參數能接收變量,那么一個函數就可以接收另一個函數作為參數,這種函數就稱之為高階函數。#!/usr/bin/env?python
#?Author:dayi123
def?fuc(a,b,f):
return?f(a)+f(b)?????#將a、b的值交給函數f處理后求和再返回
add?=?fuc(7,-10,abs)??????#將內置函數abs傳遞給f
print(add)
總結
以上是生活随笔為你收集整理的python123编写函数求和_Python基础之函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python算法攻略_算法基础及pyth
- 下一篇: 420一个像素多少个字节_一个Java方