python:函数、参数传递、递归

本文详细探讨了Python中函数作为对象的特性,包括变量作用域的全局与局部差异,参数传递的原理,以及不同类型的参数处理方式。特别地,文章深入解析了递归函数的工作机制,并通过示例展示了递归在解决问题时的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、测试函数也是对象

def a():
    print("xyxyyx")
a()
c = a()
c

输出为

cccc
xyxyyx
xyxyyx

2.变量的作用域(全局变量和局部变量)

import math#全局变量
def te01():
    for i in range(10):
        y=math.sqrt(30)
    print(y)
te01()

def te02():
    b=math.sqrt#局部变量
    for i in range(10):
        n=b(30)
    print(n)
te02()

输出为

5.477225575051661
5.477225575051661

3.参数的传递

#1参数传递的可变对象:列表、字典
n1=[10,20]
def f2(m):
    print("m",id(m))
    m.append(30)
f2(n1)
print("n1",id(n1))
print(n1)
#2.传递的不可变对象:int\float\字符串、元组、布尔值
a=100
def f3(n):
    print("n",id(n))
    n=n+200
    print(n)
f3(a)
print("a",id(a))
#3.深拷贝deepcopy和浅拷贝copy
#浅拷贝
import copy
a1=[10,20,[5,6]]
b1=copy.copy(a1)
print("a1",a1)
print("b1",b1)
b1.append(30)
b1[2].append(8)
print("a1",a1)
print("b1",b1)
#深拷贝
def Deepcopy1():
    a1 = [10, 20, [5, 6]]
    b1 = copy.deepcopy(a1)
    print("a1", a1)
    print("b1", b1)
    b1.append(30)
    b1[2].append(8)
    print("a1", a1)
    print("b1", b1)
Deepcopy1()
#4.传递不可变对象时,如果发生拷贝,是浅拷贝
a2=(2,3,[5,7])
print("a2",id(a2))
def f5(m):
    print("m",id(m))
    m[2][0]=888
    print("m",m)
    print(id(m))
f5(a2)
print(a2)

输出为

m 2120991334984
n1 2120991334984
[10, 20, 30]
n 140705363763104
300
a 140705363763104
a1 [10, 20, [5, 6]]
b1 [10, 20, [5, 6]]
a1 [10, 20, [5, 6, 8]]
b1 [10, 20, [5, 6, 8], 30]
a1 [10, 20, [5, 6]]
b1 [10, 20, [5, 6]]
a1 [10, 20, [5, 6]]
b1 [10, 20, [5, 6, 8], 30]
a2 2121040684016
m 2121040684016
m (2, 3, [888, 7])
2121040684016
(2, 3, [888, 7])

4.参数的几种类型

#1位置参数
def f6(q,b,c):
    print(a,b,c)
f6(10,20,30)
#2.默认值参数
def f7(a,b,c=10,d=20):
    print(a,b,c,d)
f7(8,9)
f7(8,9,19)
#3命名参数
def f8(a,b,c):
    print(a,b,c)
f8(b=10,c=12,a=34)
#可变参数
def f9(a,b,*c):#1个*放在元组里面
    print(a,b,c)
f9(8,9,10,11)

def f10(a,b,**c):#两个*放在字典里面
    print(a,b,c)
f10 (8,9,name='gaoqi',age=18,city='shandong')
#强制命名参数
def f11(*a,b,c):
    print(a,b,c)
f11(2,b=3,c=4)
#lambda表达式和匿名函数
f =lambda a,b,c:a+b+c
print(f)
print(f(2,3,4))
g=[lambda a:a*2,lambda b:b*3,lambda c:c*4]
print(g[0](6),g[1](7),g[2](8))
#eval()函数
s="print('abcde')"
eval(s)

a=10
b=20
c=eval("a+b")
print(c)

dict1=dict(a=100,b=200)
d=eval("a+b",dict1)
print(d)

输出为

100 20 30
8 9 10 20
8 9 19 20
34 10 12
8 9 (10, 11)
8 9 {‘name’: ‘gaoqi’, ‘age’: 18, ‘city’: ‘shandong’}
(2,) 3 4
<function at 0x000001EDD7E13158>
9
12 21 32
abcde
30
300

5.递归函数

#递归函数
def f13():
    print("test01")
    f14()

def f14():
    print("f14")
f13()
#测试递归的基本原理
def f15(n):
    print("f15",n)
    if n==0:
        print("over")
    else:
        f15(n-1)
    print("*******",n)
f15(4)
#使用递归函数计算阶乘
def f16(n):
    if n==1:
        return 1
    else :
       return n*f16(n-1)
result=f16(5)
print(result)


f16(5)

输出为

test01
f14
f15 4
f15 3
f15 2
f15 1
f15 0
over
******* 0
******* 1
******* 2
******* 3
******* 4
120

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值