day10-總結(jié)

函數(shù)的返回值

a.就是返回給使用者的值
b.就是return后面的值
c.就是函數(shù)調(diào)用表達式的值
python中每個函數(shù)都有返回值,返回值就是return后面的值,如果函數(shù)中沒有return,那么函數(shù)的返回值為None

1.函數(shù)調(diào)用

在存在return時在執(zhí)行完函數(shù)體后,將返回值返回給函數(shù)調(diào)用表達式,然后回到函數(shù)調(diào)用的位置

2.return關(guān)鍵字

將renturn后面的值返回給函數(shù)調(diào)用表達式
函數(shù)調(diào)用表達式:python中每個函數(shù)調(diào)用表達式都有值

def f1(a):
    print(a)
f1('a')
print(f1('a'))

# 練習(xí):寫個函數(shù),判斷指定的年齡是否屬于成年人(結(jié)果返回)
def is_adult(age):
    if age >= 18:
        return True
    return False
print(is_adult(30))
if is_adult(10):
    print('可以進網(wǎng)吧')
else:
    print('未成年人禁止進入')
person = {'name':'jack','is_adult':is_adult(30)}
print(person)

3.函數(shù)的結(jié)束

a.函數(shù)執(zhí)行完
b.遇到return

def fun2():
    print('123')
    return 10
    print('333')

print(fun2())

# 練習(xí) 寫一個函數(shù),求1+2+3+......,和不能大于10000
def sum_limit(a):
    sum1 = 0
    x = 1
    while True:
        if sum1 + x >= a:
            return sum1,x-1
        sum1 += x
        x += 1
            
print(sum_limit(10000),type(sum_limit(10000)))
注:python中函數(shù)可以由多個返回值,在return后面返回多個字,每個值之間用逗號隔開,返回為元組

作用域

全局變量:文件開始到結(jié)束都能使用
局部變量:開始于函數(shù)聲明,結(jié)束于函數(shù)聲明

1.全局變量

a=10 #這是一個全局變量

print(a)

def func1():
    print(a)

for x in range(10):
    b=100#這是一個全局變量
    print(a)
    print(b)

2.局部變量

def func3():
    aaa=100#局部變量
    print(aaa)

3.global和nonlocal

  • global:在函數(shù)中創(chuàng)建一個全局變量
    格式:
    global 變量名
    變量名=值
bcd='bcd'
abc='abc'#全局變量
def func4():
    abc='aaa'#局部變量,如果全局變量名和全局變量名相同,在函數(shù)中使用的是局部變量
    print(abc)
    global bcd  #說明bcd是一個全局變量
    bcd=200
    print(bcd)
func4()
print(abc)
print(bcd)
#聲明一個變量 統(tǒng)計一個函數(shù)調(diào)用的次數(shù)
count=0
def my_func():
    global count
    count+=1
    print('==========')
my_func()
my_func()
my_func()
print(count)
  • nonlocal :在函數(shù)中聲明函數(shù)的時候才需要使用
def func11():
    a_11=10
    print(a)
    #python中函數(shù)中可以聲明函數(shù)
    def func12():
        nonlocal  a_11
        a_11=100
        print('內(nèi)部',a_11)
        print('內(nèi)部函數(shù)')
    func12()
    print('外部',a_11)

匿名函數(shù)

本質(zhì)還是函數(shù),以另外一種簡單的方式來聲明

匿名函數(shù)的聲明:

函數(shù)名 = lambda 參數(shù)列表:返回值 --> 結(jié)果是一個函數(shù)變量
lambda 是聲明匿名函數(shù)的關(guān)鍵字

# 寫一個函數(shù),計算2個數(shù)的和
my_sum1 = lambda a,b:a+b
print(my_sum1(1,2)) 
funcs = []
for i in range(5):
    funcs.append(lambda x:x*i)
print(funcs[2](2)) # 8
print(funcs[4](2)) # 8

函數(shù)作為變量

聲明一個函數(shù)就是在聲明一個變量
1.函數(shù)名可以當成變量來使用
2.可以打印,可以賦值,可以查看,一般對于變量的操作都能對函數(shù)進行

# 函數(shù)名func1可以當做變量使用
def func1(a):
    print(a)
    return 10

print(func1,type(func1))
a = func1
b = func1(10) + 100
a('aaa')

# 將函數(shù)func1作為列表的元素
functions = [func1,func1(10)]
functions[0]('abc')

1.將函數(shù)作為參數(shù)

def my_sum(*number):
    sum1 = 0
    for item in number:
        sum1 += item
    return sum1

def my_mul(*number):
    sum1 = 1
    for item in number:
        sum1 *= item
    return sum1

def operation(x,y,method = ''):
    try:
        return method(x,y)
    except:
        return False

print(operation(3,6,my_sum))

python中的三目運算符
值1 if 判斷表達式 else 值2--> 判斷表達式是否為True,為True整個表達式的結(jié)果是'值1',否則是'值2'

a = 10 if 10 > 20 else 20
result1 = operation(10,20,my_sum)
result2 = operation(10,20,my_mul)
result3 = operation(10,20,lambda x,y:x<y)
result4 = operation(10,20,lambda x,y:x if x>y else y)
print(result1,result2,result3,result4)

2.將函數(shù)作為函數(shù)的返回值

# 寫一個函數(shù)有一個參數(shù),要求傳入一個運算符號(+,-,*,>,<),返回符號對應(yīng)的功能
# + --> 求和功能
def sum1(*number):
    sumx = 0
    for item in number:
        sumx += item
    return sumx
# - --> 求差功能
def sum2(*number):
    sumx = number[0]*2
    for item in number:
        sumx -= item
    return sumx
# * --> 求乘功能
def sum3(*number):
    sumx = 1
    for item in number:
        sumx *= item
    return sumx
# 程序編碼:
def operation_char(char):
    if char == '+':
        return sum1
    elif char == '-':
        return sum2
    elif char == '*':
        return sum3
    else:
        return lambda *number:None

print(operation_char('+')(10,20))
print(operation_char('-')(10,20))
print(operation_char('*')(10,20))
print(operation_char('i')(10,20))

遞歸函數(shù)

1.什么是函數(shù)

在函數(shù)的函數(shù)體中調(diào)用函數(shù)本身
循環(huán)能做的事情理論上遞歸都可以做

2.怎么寫一個遞歸函數(shù)

a.找臨界值(跳出循環(huán) -> return)
b.找關(guān)系:假設(shè)當前函數(shù)對應(yīng)的功能已經(jīng)實現(xiàn),找到f(n)和f(n-1)的關(guān)系
c.使用f(n-1)與前面找到的關(guān)系去實現(xiàn)f(n)的功能

# 計算1+...+n:
def sum1(n):
    if n == 1:
        return 1
    return n+sum1(n-1)

print(sum1(10))
# 用遞歸求2*4*6...n:
def sum2(n):
    if n == 2:
        return 2
    return n*sum2(n-2)

print(sum2(8))
# 遞歸打印圖案
'''n=3
***
**
*
'''
def gh(n):
    if n < 1:
        return
    print('*'*n)
    gh(n-1)

gh(4)

注:1.對遞歸的要求:能不用就不用。2.函數(shù)調(diào)用的過程是一個壓棧的過程(沒調(diào)用一次函數(shù),系統(tǒng)都要為其分配內(nèi)存空間,用來存儲函數(shù)中聲明變量和參數(shù)等,這個內(nèi)存在函數(shù)調(diào)用結(jié)束后會自動銷毀)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 6,031評論 2 16
  • 〇、前言 本文共108張圖,流量黨請慎重! 歷時1個半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識的框架詳細梳理了一遍。 ...
    Raxxie閱讀 19,579評論 17 410
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,555評論 0 13
  • 一個月的研習(xí)營的時間,眨眼就過!還記得當初有朋友參加手繪版思維導(dǎo)圖時,我說思維導(dǎo)圖我要學(xué),但是我絕對不學(xué)手...
    Anny蘋閱讀 2,634評論 4 2
  • 千萬千萬不要忘了C語言在表達式中把一個類型為T的數(shù)組的左值當作是指向該數(shù)組第一個元素的指針。 什么時候可以是數(shù)組和...
    Micason閱讀 356評論 0 0

友情鏈接更多精彩內(nèi)容