【Python 递归哈数&内置函数&random&re 07】


一、 递归函数 -->自己调用自己

def wahaha():
    print('wahaha')
    wahaha()
wahaha()
# 官网规定的递归的最大次数是1000次

#案例

# l=[1,2,3,4,[5,6,7,8[9,10,11,12]]]  求这个列表中所有元素的和
l=[1,2,3,4,[5,6,7,8,[9,10,11,12]]]
sum_n=0
def sum_clac(lst):
    global sum_n
    for i in lst:
        if type(i) is list:
            sum_clac(i)
        elif type(i) is int or type(i) is float:
            sum_n += i
    return sum_n
ret=sum_clac(l)
print(ret)  #78

二、内置函数

1、eval函数 -->把字符串的组成的内容当做Python的代码来执行,并返回值

2、exec函数 -->把字符串的组成的内容当做Python的代码来执行,没有返回值

a = input('>>>>') #输入:1+2
print(a) #1+2
print(eval(a)) #3
print(exec(a)) #None

3、callable 名字后面可以加()才可以被调用

   --->dir查看一个函数可以调用那些方法

a =1
print(callable(a)) #False

b = lambda :1
print(callable(b)) #True

4、print

print(1,2) #1 2 #默认已空格进行的分隔
print(1,2,end='*') #1 2*  -->end是已什么结尾的,默认已换行符(\n)进行的换行,可以用end自定义自己所需要的结尾方式
print(1,2,sep=',') #1,2 -->sep已什么分隔的

5、99乘法表

#99乘法表
for i in range(1,10):
    for j in range(1,i+1):
        print('%d*%d=%d'%(i,j,i*j),end=' ')

    print('')

6、和数字相关的函数

ret = divmod(10,3) #divmod返回(除,余)
print(ret) #(3, 1)

ret1 = round(1.2345,2) #round小数取几位
print(ret1) #1.23

ret2 = pow(2,3) #2的3次方,叫幂
print(ret2) #8
#2的3次方还可以这么写
print(2**3)
# 字典里面的数求和
dic = {'a':50,'b':100}
ret3=sum(dic[k] for k in dic) #这里面用到了生成器函数
print(ret3) #150

7、字符相关的内置函数

 常用ord,chr,repr

1)ord把十进制的转换成16进制,chr刚好相反把16进制转换成10进制

print(ord('a')) #97
print(chr(97)) #a

有什么用 --验证码收到的随机数(数字能随机,但是字符是不能随机的,想要字符随机怎么办?把数字组合后然后用chr转换)

2)repr 打印某个变量值的时候更便于区分类型

print(repr('123'))
print(repr(123))
print(123)
print('123')

执行结果:
'123'
123
123
123
常规打印的时候是区分不出来字符串还是int类型的数字,为了区分可以用repr修饰

3)reverse()  反转,类似于[::-1] 专门给list用的

  reversed() 是一个内置函数,也是反转,但是不会改变list,返回的是一个迭代器

l = [1,3,6,2]
l.reverse()
print(l) #[2, 6, 3, 1]

ret = reversed(l)
print(ret) #
print(l) #[1, 3, 6, 2] 不会改变list
for i in ret:
    print(i,end=' ') #2 6 3 1

从上面两个执行的结果可以看出来,reversed()确实不会改变list本身,他的返回结果是一个迭代器,而reverse()的确是会改变list列表本身的

8、filter、map都是一个返回值为迭代器的函数

lst = [1,2,3,4,5,6,7,8,9,10]
ret1 = filter(lambda n:n%3==0,lst)
print(ret1) #
print(ret1.__next__()) #3

ret2 = map(lambda n:n*2,lst)
print(ret2) #
print(ret2.__next__()) #2

9、zip拉链