Python——函数(2)

函数的返回值 return
返回值就是函数执行以后的返回结果
返回值可以直接使用,也可以通过一个变量来接收函数返回值的结果

def fn(*sum):
    result = 0
    for i in sum:
        result += i
    # print('输出结果为:',result)
    return result
fn(10,20,30)
print(fn(10,20,30))   #直接使用fn函数实参来使用
a = fn(10,20,30)   #也可以通过变量来接收函数返回值的结果来输出
print('接收变量输出的结果为:',a)

运行结果:

60
接收变量输出的结果为: 60

return 后面可以跟任意的对象,甚至可以是一个函数,如下:

def fn2():
    def fn():
        print('python')
    return fn

r = fn2()
print('返回结果为:',r)

运行结果:

返回结果为: <function fn2.<locals>.fn at 0x000002883247A8C8>

如果仅仅写一个return或者不写return则相当于返回return ——None

def fn3():
    print('hellow')
    print('python')
r = fn3()
print(r)

运行结果:

hellow
python
None

在return后面的代码都不会被执行,使用return函数将自动结束

def fn1():
    print('hello')
    return     #return后面的代码将不会执行,return后面的代码都不会执行
    print('python')
fn1()

运行结果:

hello
def fn():
    for i in range(5):
        if i == 4:
            return  #用来结束函数
        print(i)
    print('退出当前循环')

fn()

运行结果:

0
1
2
3

fn5与fn5()的一个区别

 #fn5()与fn5的一个区别
def fn5():
    return 100



print(fn5())  #是在调用对象,实际上是打印fn5()函数的返回值
print(fn5)   #是函数对象,实际上是打印函数对象

运行结果:

100
<function fn5 at 0x000001EFB37A3E18>

文档字符串
help()可以查询Python函数中的用法
语法:help(函数对象)

help(input)

运行结果:

Help on built-in function input in module builtins:

input(prompt=None, /)
    Read a string from standard input.  The trailing newline is stripped.
    
    The prompt string, if given, is printed to standard output without a
    trailing newline before reading input.
    
    If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
    On *nix systems, readline is used if available.

Python的作用域
在Python当中有两种作用域 全局作用域和函数作用域
全局作用域:在程序执行时创建,在程序结束时销毁,所以函数以外的区域都是作用域,在全局作用域中定义的变量,都是属于全局变量,全局变量可以在程序中的任意位置访问
局部作用域:在函数调用时创建,在函数调用结束时销毁,函数每调用一次就会产生一个新函数的作用域,在函数作用域中定义的变量都是局部变量,它只能在函数内部被访问
(从内层作用域可以看到外层作用域,从外层看不到内层)意思是:定义一个函数当函数内部有自己的变量时,将会无视全局变量,调用自己的局部变量
代码如下:

a = 30
def fn():
    a = 10
    print('a = ',a)   #函数内部有自己定义的变量值,将无视全局变量

fn()

def fn3():
    print('a = ',a)   #当函数内部没有赋值的时候,将使用全局变量

fn3()

运行结果:

a =  10
a =  30

如果希望在函数内部修改全局变量,则需要使用global关键字来声明变量

a =20
def fn():
    #如果希望在函数内部修改全局变量,则需要使用global关键字来声明变量
    global a    #当使用gloal关键字的时候,声明在函数内部的使用是全局变量,此时再去修改a时,是一个全局变量
    a = 530
    print('a = ', a)


fn()
print('a =',a)

运行结果:

a =  530
a = 530

命名空间
命名空间实际上就是一个字典,是一个专门用来存储变量的字典locals()用来获取当前作用域的命名空间。
如果在全局作用域中调用locals()函数则获取全局作用域命名空间,如果在函数作用域中调用locals()则获取函数命名空间
返回的就是一个字典

a = 100  #当变量值放在locals上面则无函数定义的情况下,将调用的是全局变量获取全局变量
s = locals()
print(s)
print(s['__file__'])  #命名空间如同于函数的键值对信息

运行结果:

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000019D2695C128>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/Pycharm/Python——函数(2).py', '__cached__': None, 'a': 100, 's': {...}}
E:/Pycharm/Python——函数(2.py
def name():
    a = 100
    s = locals()   # 在函数内部调用locals()会获取函数的命名空间
    # print(s)
    s['b'] = 20
    print(s)
name()

运行结果:

{'a': 100, 'b': 20}


def fn3(n):
    # 创建一个变量,来接收结果
    result = n
    for i in range(1, n):
        result = result * i
    return result


print(fn3(10))


# 递归式函数
# 递归简单理解就是函数自己在调用自己
# 递归式函数就是函数自己调用自己
def fn3(n):
    if n == 1:
        return 1
    return n * fn3(n - 1)


print(fn3(10))

运行结果:

3628800
3628800

递归式函数的两个条件
1、基线条件
#问题可以被分解成最小问题,当满足基线条件时,递归不在执行
2、递归条件
#将问题继续分解的条件


# 递归式函数
# 递归简单理解就是函数自己在调用自己
# 递归式函数就是函数自己调用自己
def fn3(n):
    # 基线条件
    if n == 1:
        # 1的阶乘就是1
        return 1

    # 递归条件
    return n * fn3(n - 1)  #为什么使用fn3呢,因为使用到一个函数递归的作用


print(fn3(10))

运行结果:

3628800
3628800

练习:创建一个函数,来为任何数做任何幂运算
#2 ** 4 2 * 2 * 2 * 2 =16
#2 ** 3 2 * 2 * 2 =8
#2 ** 2 2 * 2 = 4
#2 ** 1 2 * 1 =2

def fn4(n,i):
    #定义一个函数,其中有两个参数 n要做幂运算,i做幂运算的次数
    if i == 1:    #当幂运输为1时,返回的结果相当于就是n
        return n
    return n*fn4(n,i-1)
print(fn4(2,4))

运行结果:

16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值