09函数返回值,作用域,递归,匿名

一.返回值的作用:

(1)返回值的作用,函数里面的数据传递到外面。
(2)要不要返回值:
就看产生了新的数据没有,函数里面产生新的值,就需要返回值。
(3)初学着怎么确定需不需要返回值:
实现函数的功能完成后会不会产生新的数据。
(4)怎么确定返回值:
声明函数的时候哦,return后面的值就是函数的返回值。默认值是None
(5)return 是关键值,只能出现在函数体中,
(6)return 作用:确定函数的返回值,结束函数。执行函数体的时候,如果遇到return函数直接结束,同时将return后面的值作为返回值。
(7)实例:

def pr():
    print(111)
    print(2222)
    return #这个返回了值,函数结束,后面就不执行了。
    print(333)

(8)怎么获取函数的返回值:
获取函数调用的表达式就是函数的返回值。
函数调用的语句就叫函数表达式。
普通数据能做的事情,函数调用表达式都是可以做的。
(9)获取函数的返回值
函数调用的表达式可以把值赋给变量。
(10)完整的函数的调用的过程:
执行的过程:
1.先回到函数声明的位置,
2.传参,保证每个参数都有值,
3.执行函数体,
4.确定返回值:执行完函数体后有没有遇到return,如果遇到了后面就是返回值,没有遇到都是None
5.回到函数调用表达式的值才是返回值。
(11)内存的变化:函数的调用的过程中系统会在栈中开辟一个独立的内存区间,专门用来保存在函数中声明的变量和数据,形参也是保存在栈的专用区间,单函数结束的时候内存的空间会销毁。
销毁之前返回,返回值。

def hanshu(a, b):
    c = a + b
    return c


value_sum = hanshu(12, 13)
print(value_sum)

def hanshu(b):
    print(b)
    return b*2
a=hanshu(3)#这个函数会调用函数这种打印3,在打印返回值6
print(a)

def hanshu(a):
    b=a
    return b

print(hanshu([12].copy()))#copy这个函数就是有返回值的,而append()是没有返回值的。如果是.append()就没有返回值。
print(hanshu([12].append(12)))#copy这个函数就是有返回值的,而append()是没有返回值的。如果是.append()就没有返回值None
函数对列表,字典,字符串进行操作的时候,如果这个函数本身是有返回值的,那么就是有返值

二。

1.变量的作用域,变量可以使用的范围。
2根据变量声明后使用的。范围不一样,分为全局,和局部。
(1)全局变量
没有声明在函数中的和列中的变量都是全局变量。
作用域:从声明开始到文件结束任何地方都是可以使用的。
声明在函数和类外面的都是全局变量。

a = 10
for x in range(a):
    print(a)


def hanshu():
    print(a)


hanshu()
for b in range(4):  # b也是全局变量。
    pass

(2)局部变量:声明在函数中的变量就是局部变量。
作用域:声明开始到函数结束(形参,声明在函数中的变量)
(3)global和nonlocal
注意:这两个关键字只能用于函数体中。
1.global 用于全局
如果在外面定义一个变量,在函数更改后,使用后,再出函数使用还是原来的变量
原因是:函数中那个并没有改变外面的而是创建了一个和外面那个一样的变量。
使用:在函数中给变量赋值前加: global 变量名 (然后 换行) 变量=值
作用:在函数声明全局变量。

a1=100

def func():
    a1=200
    print(a1)----这个打印的是200
    
func()
print(a1)---这个打印的是100
```python
a1 = 100
def func():
    global a1
    a1 = 200
    print(a1) #- ---这个时候是200


func()
print(a1) #- --这个也是200,global使用后就是全局的了。

a1 = 100


def func():
    global a1
    a1 = 200
    print(a1)  # - ---这个时候是200


func()
print(a1)  # - --这个也是200,global使用后就是全局的了。

(2)nonlocal
使用的方法:在函数中变量赋值前加:nonlocal 变量名
作用:在函数的局部中修改局部的变量的值。

def func5():
    a2=200
    def func6():
        #这里的a2必须在上层声明过的
        # nonlocal a2
        a2=100
        print(a2)#---这个还是打印的是
    func6()
    print(a2)
func5()

def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()

三。匿名函数

匿名函数还是函数,除了声明的语法以外其他语法基本都适用于匿名函数
(1)声明匿名函数
就相当于
lambda 参数列表 :返回值
def (参数列表):
return 返回值

(2)说明
lambda-关键字,固定的写法
--形参:参数名1,参数名2
:---不产生缩进。
返回值--相当于普通函数中的return语句。
(3)用处 -- 功能简单就用
匿名函数的调用和普通的没有区别。
func1 = lambda num1, num2: num2 + num1
print(func1(12, 23))
func2 = lambda a, b, c: print(a, b, c)
fun3 = lambda *nums: sum(nums)
print(fun3(4))
注意不支持类型的说明。
练习:写一个匿名函数判断的是否是闰年

func5 = lambda year: (year % 400 == 0) or (year % 400 == 0 and year % 100 != 0)
print(func5(2018))

四。

声明函数的时候调用函数本身,这样的函数就是递归函数
递归可以使用循环的效果。
原则上除了死循环,其他的循环递归都可以实现

ef func1():
    print("=========")
    func1()

func1()

2.递归怎么用:
"""
递归的套路:
a.设置临界值--循环结束的条件(保证函数结束)

b.找关系-----找f(n)和f(n-1)的关系。
c.假设函数的功能已经实现,通过f(n-1)去实现f(n)的功能。
"""

递归函数计算1+2+3..100
def ytsum(n):
    if n==1:
        return 1
    # 找关系
    #用f(n-1)实现f(n)的功能。
    # f(n)1+2+3....100
    # f(n-1)1+2+3+....(n-1)
    return ytsum(n-1)+n
print(ytsum(900))
递归求斐波那契:
def fibo(n):
   """递归函数
   输出斐波那契数列"""
   if n == 1 or n==2  :
       return n
   else:
       return(fibo(n-1) + fibo(n-2))
print(fibo(9))
练习
def f(n):
    if n==1:
       print("*")
       return
    #关系:实现f(n-1)的功能后再打印N颗星
    else:
        f(n-1)
        print(n*"*")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353