Looking For Anything Specific?

python函数知识三 函数名的使用、格式化、递归

12.函数名的使用

函数是第一类对象
  1. 函数名可以当做值被赋值给变量
def func():
    print(1)
    return
a = func
print(func)
print(a)
a()
  1. 函数名可以当做元素存放在容器中:
def func():
    print(1)
    return
lst = [func,func,func]
for i in lst():
    i()
  1. 函数名可以当做函数的参数
def func(f):
    f()
    return
def foo():
    print(123)
    return
func(foo)
  1. 函数名可以当做函数的返回值
def func():
    def foo():
        print(123)
        return
    return foo
a = func()
a()

13.格式化f:

python3.6版本及以上可以使用
#填充字符串
s = f"你好{'啊'}"
s1 = F"你好{'a'}"
print(s)
print(s1)
#填充变量
s = "不去"
s2 = f"我去{s}"
#填充计算公式
s1 = f"{35+15}"
print(s1)
#填充表达式
a = 10
b = 20
s1 = f"{a if a>b else b}"
print(s1)
#填充大括号
s1 = f"{{{{{'我勒个去'}}}}}"#每两个显示一个
print(s1)
#{}大括号内可以放{},int,方法,函数,list,str,字典值
#{}内不可放符号,要用引号引起来
s1 = f"{{}{}{}{}}"
print(s1)

s1 = f"{print(123)}"
print(s1)

14.递归:

特点:不断调用自己本身
  1. 死递归 -- 不断调用自己
  2. 有明确的终止条件
满足以上两个条件是有效递归
递:一直执行
归:从结束开始往回退
官方声明:最大层次 1000,实际测试998/997
def func():
    print(123)
    func()
func()    
#猜数:
'''
1.宝元 18-2-2-2
2.太白 18-2-2
3.wusir 18-2
4.alex 18
'''

def age(n):
    if n == 4:
        return 18
    else:
        return age(n+1)-2
print(age(1))

#分布解析:
def age4(n):
    if n == 4:
        return 18
    
def age3(n):
    if n == 4:
        return 18
    else:
        return age4(n+1)-2
    
def age2(n):
    if n == 4:
        return 18
    else:
        return age3(n+1)-2
    
def age1(n):
    if n == 4:
        return 18
    else:
        return age2(n+1)-2
print(age(1))
    

可变数据类型默认参数的坑:
def func(a,lst = []):
    lst.append(a)
    return lst
lst1 = func(10)
lst2 = func(123,[])
lst3 = func('aaa')

print(lst1)
print(lst2)
print(lst3)
'''
结果:
[10,'aaa']
[123]
[10,'aaa']
'''