Python3

函数的返回值

【例子】

1

def add(a, b):

2

    return a + b

3

4

5

print(add(1, 2))  # 3

6

print(add([1, 2, 3], [4, 5, 6]))  # [1, 2, 3, 4, 5, 6]
3

[1, 2, 3, 4, 5, 6]

【例子】

1

def back():

2

    return [1, '小马的程序人生', 3.14]

3

4

5

print(back())  # [1, '小马的程序人生', 3.14]
[1, '小马的程序人生', 3.14]

【例子】

1

def back():

2

    return 1, '小马的程序人生', 3.14

3

4

5

print(back())  # (1, '小马的程序人生', 3.14)
(1, '小马的程序人生', 3.14)

【例子】

1

def printme(str):

2

    print(str)

3

4

temp = printme('hello') # hello

5

print(temp) # None

6

print(type(temp))  # <class 'NoneType'>
hello

None

<class 'NoneType'>

变量作用域

  • Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
  • 定义在函数内部的变量拥有局部作用域,该变量称为局部变量。
  • 定义在函数外部的变量拥有全局作用域,该变量称为全局变量。
  • 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。

【例子】

1

def discounts(price, rate):

2

    final_price = price * rate

3

    return final_price

4

5

6

old_price = float(input('请输入原价:'))  # 98

7

rate = float(input('请输入折扣率:'))  # 0.9

8

new_price = discounts(old_price, rate)

9

print('打折后价格是:%.2f' % new_price)  # 88.20
请输入原价:98

请输入折扣率:0.9

打折后价格是:88.20
  • 当内部作用域想修改外部作用域的变量时,就要用到globalnonlocal关键字了。

【例子】

1

num = 1

2

3

4

def fun1():

5

    global num  # 需要使用 global 关键字声明

6

    print(num)  # 1

7

    num = 123

8

    print(num)  # 123

9

10

11

fun1()

12

print(num)  # 123
1

123

123

内嵌函数

【例子】

1

def outer():

2

    print('outer函数在这被调用')

3

4

    def inner():

5

        print('inner函数在这被调用')

6

7

    inner()  # 该函数只能在outer函数内部被调用

8

9

10

outer()

11

# outer函数在这被调用

12

# inner函数在这被调用
outer函数在这被调用

inner函数在这被调用

闭包

  • 是函数式编程的一个重要的语法结构,是一种特殊的内嵌函数。
  • 如果在一个内部函数里对外层非全局作用域的变量进行引用,那么内部函数就被认为是闭包。
  • 通过闭包可以访问外层非全局作用域的变量,这个作用域称为 闭包作用域

【例子】

1

def funX(x):

2

    def funY(y):

3

        return x * y

4

5

    return funY

6

7

8

i = funX(8)

9

print(type(i))  # <class 'function'>

10

print(i(5))  # 40
<class 'function'>

40

【例子】闭包的返回值通常是函数。

1

def make_counter(init):

2

    counter = [init]

3

4

    def inc(): counter[0] += 1

5

6

    def dec(): counter[0] -= 1

7

8

    def get(): return counter[0]

9

10

    def reset(): counter[0] = init

11

12

    return inc, dec, get, reset

13

14

15

inc, dec, get, reset = make_counter(0)

16

inc()

17

inc()

18

inc()

19

print(get())  # 3

20

dec()

21

print(get())  # 2

22

reset()

23

print(get())  # 0
3

2

0

【例子】 如果要修改闭包作用域中的变量则需要 nonlocal 关键字

1

def outer():

2

    num = 10

3

4

    def inner():

5

        nonlocal num  # nonlocal关键字声明

6

        num = 100

7

        print(num)

8

9

    inner()

10

    print(num)

11

12

13

outer()

14

15

# 100

16

# 100
100

100

递归

  • 如果一个函数在内部调用自身本身,这个函数就是递归函数。

【例子】n! = 1 x 2 x 3 x ... x n

1

# 利用循环

2

n = 5

3

for k in range(1, 5):

4

    n = n * k

5

print(n)  # 120

6

7

# 利用递归

8

def factorial(n):

9

    if n == 1:

10

        return 1

11

    return n * factorial(n - 1)

12

13

14

print(factorial(5)) # 120
120

120

【例子】斐波那契数列 f(n)=f(n-1)+f(n-2), f(0)=0 f(1)=1

1

# 利用循环

2

i = 0

3

j = 1

4

lst = list([i, j])

5

for k in range(2, 11):

6

    k = i + j

7

    lst.append(k)

8

    i = j

9

    j = k

10

print(lst)  

11

# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

12

13

# 利用递归

14

def recur_fibo(n):

15

    if n <= 1:

16

        return n

17

    return recur_fibo(n - 1) + recur_fibo(n - 2)

18

19

20

lst = list()

21

for k in range(11):

22

    lst.append(recur_fibo(k))

23

print(lst)  

24

# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

【例子】设置递归的层数,Python默认递归层数为 100

1

import sys

2

3

sys.setrecursionlimit(1000)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值