Python基础5 函数基本概念

目录

函数分类

函数的定义和调用

形参与实参

文档字符串(函数的注释)

函数返回值

函数也是对象

变量的作用域(全局变量与局部变量)

全局变量:

局部变量:

print(locals())  输出局部变量

print(globals()) 输出全局变量

参数的传递

传递可变对象的引用

传递可变对象的引用

浅拷贝copy()和深拷贝deepcopy()

传递不可变对象如果发生拷贝 是浅拷贝

参数的几种类型

位置参数

默认值参数

命名参数

可变参数

强制命名参数

lambda 表达式和匿名函数

eval()函数

递归函数

阶乘计算案例(分形几何)


函数分类

1.内置函数

2.标准库函数

3.第三方库函数

4.用户自定义函数

函数的定义和调用

形参与实参

形参在定义函数时使用,相当于局部变量

调用函数时 往函数里传的值是实参

文档字符串(函数的注释)

''' 注释 '''

help(函数名.__doc__)用于调用文档字符串

def printMAX(a,b):
    '''用于打印较大的值 '''
    if a>b:
        print(a)
    else:
        print(b)
help(printMAX.__doc__)
printMAX(23,45)

函数返回值

1.return 返回值 结束函数的执行

2.不写返回值 默认返回None

def add(a,b):
    '''返回和''' 
    return a+b
c=add(3,4)
print(c)

3.返回值可以打包成数据类型

def test(x,y,z):
    return[x*10,y*10,z*10]
print(test(1,2,3))

函数也是对象

def test():
    print("****")

test()
c=test
c()

print(id(c))
print(id(test))

变量的作用域(全局变量与局部变量)

全局变量:

1.作用域为模块

2.降低通用性与可读性

3.函数内改变全局变量的值  需要global声明

4.全局变量一般做常量使用

局部变量:

1.在函数体中声明的变量

2.局部变量引用比全局变量快

3.如果局部变量与全局变量同名,在函数内使用局部变量

print(locals())  输出局部变量

print(globals()) 输出全局变量

参数的传递

传递可变对象的引用

字典 列表 集合 自定义对象等

对可变对象做的修改是在其本身修改的,操作的是原本的对象

a=[10,20]
print(id(a))
def test(m):
    print(id(m))
    m.append(300)
test(a)
print(a)

传递可变对象的引用

数字,字符串,元组,布尔值

操作时创建一个新的对象

a=10
print(id(a))
def test(m):
    print(id(m))
    m+=1
    print(id(m))
    print(m)
test(a)
print(a)

运行结果  操作前 地址是一样的,操作后地址改变,但是操作后a不变

浅拷贝copy()和深拷贝deepcopy()

浅拷贝 不拷贝子对象内容,只拷贝子对象引用

深拷贝 连子对象内存也全拷贝一份,对子对象修改不会影响源对象

import copy

a=[10,20,[5,6]]
b=copy.copy(a)

print("a",a)
print("b",b)
b.append(30)
b[2].append(7)
print("浅拷贝")
print("a",a)
print("b",b)

c=[10,20,[5,6]]
d=copy.deepcopy(c)

print("c",c)
print("d",d)
d.append(30)
d[2].append(7)
print("深拷贝")
print("c",c)
print("d",d)

传递不可变对象如果发生拷贝 是浅拷贝

元组是不可变对象,但是浅拷贝 其子对象可以被改变

a=([10,20,[20,30]])
print("a:",a)
print("id(a)",id(a))
def test(m):
    print("m",m)
    m[2][0]=888
    print(m)
    print("m",id(m))
test(a)
print(a)

参数的几种类型

位置参数

通过位置对应

默认值参数

默认值放后面 不传用默认值 传就覆盖默认值

命名参数

调用的时候 把形参名字写出来  根据名字匹配  此时不需要对应位置

可变参数

1.*param,将参数收集到一个元组

2.**param,将参数收集到一个字典

def test(a,b,*c,**d):
    print(a,b,c,d)
test(10,20,20,30,30,hh=5,u="uu")

强制命名参数

在带星号”可变数量参数“后面增加新的参数,必须是”强制命名参数“

def f1(*a,b,c):
    print(a,b,c)
f1(5,5,6,7,b=3,c=7)

lambda 表达式和匿名函数

定义简单函数 做简单事情

g = [lambda a:a*2,lambda b:b*3]
print(g[0](21),g[0](22))

eval()函数

用于执行代码,将字符串当成有效表达式求值并返回结果

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

递归函数

阶乘计算案例(分形几何)

def fac(a):
    if a==1:
        print("over")
        return 1 # return不能少
    else:
        return a*fac(a-1)
re=fac(3)
print(re)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值