Python函数2

函数返回值return

返回函数的值,可以是任意python对象
如果没有return或return后没有对象,则相当于return None
return 一旦执行函数自动结束,return下面的代码不会执行。与循环语句中的break有点类似。

print 与print()的区别

  • print是函数对象
>>> print(print)
<built-in function print>
>>> id(print)
2931764592504
  • print()是调用函数,执行函数中的代码块
>>> print('hello')
hello

函数中文档字符串

def s(a:int,b:float,c:True)-> int:   #在参数后用冒号提示参数使用的类型
    '''
    #三引号注释多行字符,可以写各种注释,说明函数用法,参数类型等
    :param a: 参数a  
    :param b: 参数b
    :param c: 参数c
    :return: 返回值
    '''
    pass
help(s)  #用help(函数对象),查看函数的使用方法
执行结果
s(a:int, b:float, c:True) -> int
    #三引号注释多行字符,可以写各种注释,说明函数用法,参数类型等
    :param a: 参数a
    :param b: 参数b
    :param c: 参数c
    :return: 返回值

函数的作用域,gloable,nonlocal关键字

作用域,指变量生效的区域
在这里插入图片描述

  • 全局作用域
    全局变量在任意位置都可以访问,如图a变量,可以被函数1,2,3访问,使用a之前,会从本作用域寻找是否有变量a,若本作用域没有定义该变量,需要用global声明才能使用外部变量a
  • 函数作用域
    只在本函数内生效,如b只在函数1生效,c只在函数2和函数3生效,变量d只在函数3生效
  • 函数内部使用global 参数 ,声明参数为全局变量,此时如果修改参数值,则可以修改的是全局变量
  • global
    一般在函数内部使用,声明变量为全局变量
  • nonlocal
    嵌套的函数内使用,声明变量为外层函数变量
1global的使用
def s()-> int:
    global a
    a= 10
    pass
a=1
print(a)
s()
print(a)
执行结果
1  执行函数前a的值
10 执行函数后a的值

2nonlocal的使用
name = 'asd'
def fn():
	# nonlocal name
	name = 'ABC'
	def fn1():
		nonlocal name
		print('name1=', name)  #ABC
		name = '孙悟空'
		print('name2=', name)  #孙悟空
		def fn2():
			nonlocal name
			print('name5=', name)#孙悟空
			name = '猪八戒'
			print('name6=',name)#猪八戒
		fn2()
	fn1()
	print('name3=', name)#猪八戒
fn()
print('name4=',name)

执行结果
name1= ABC
name2= 孙悟空
name5= 孙悟空
name6= 猪八戒
name3= 猪八戒
name4= asd

命名空间locals(),globals()

命名空间返回的是一个字典,是一个专门用来存储变量的字典。
locals()获取当前作用域的命名空间。
可以用字典的方式添加或修改值,一般不建议这么做。
globals() 函数可以用来在任意位置获取全局命名空间。

a=1
def s()-> int:
    global a
    a= 10
    print(a)
    b=10
    print(locals())
    pass
print(a)
s()
print(a)
结果
1
10
{'b': 10}  a声明为全局变量,所以不出现在函数的命名空间中
10

递归函数

递归式函数,在函数中,调用自己

创建递归函数的2个条件

  1. 基线条件
    问题可以被分解为最小的问题,当满足基线条件的时候,递归就不在执行了
  2. 递归条件
    将问题可以分解的条件
  • 任意数的阶乘
    5! = 5x4x3x2x1= 5x4!
    4! = 4x3x2x1 = 4x3!
    3! = 3x2x1 = 3x2!
    2! = 2x1 = 2x1!
    1! = 1
def jie_cheng(n):
    #基线条件
    if n==1:
        return 1
    #递归条件
    return n*jie_cheng(n-1)
    
print(jie_cheng(5)) #120
  • 任意数字幂运算
    5**5 = 5x5x5x5x5 = 5x(5**4)
    5**4 = 5x5x5x5 = 5x(5**3)
    5**3 = 5x5x5 = 5x(5**2)
    5**2 = 5x5 = 5x(5**1)
    5**1 = 5
def jie_cheng(n,i):
    #基线条件
    if i==1:
        return n
    #递归条件
    return n*jie_cheng(n,i-1)
    
print(jie_cheng(5,5)) #3125
  • 判断回文字符串
    字符串从后往前读和从后往前读是一样的 例如 abcba ,abc
    abcdcba 判断头尾字符是否相等,相等进入下一步,否则退出
    bcdcb 除去上面字符串头尾字符后,再判断头尾字符相等,相等进入下一步,否则退出
    cdc 除去上面字符串头尾字符后,判断头尾字符相等,相等进入下一步,否则退出
    d 返回True
def hui_wen(s):
    #if s[0]==s[-1]:
    if len(s)<2:  #长度小于2肯定是回文
        return True
    elif s[0]!=s[-1]:
        return False
    return hui_wen(s[1:-1])  #递归
print(hui_wen('abcdcba'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值