python def函数报错详解_Python学习笔记:函数详解(上)

一、面向对象:将客观世界的事物抽象成计算机中的数据结构

类:用class定义,这是当前编程的重点范式,以后会单独介绍。

二、函数编程:逻辑结构化和过程化的一种编程方法

1、函数-->用def定义

2、好处:

a、重用逻辑

b、保持一致性:改一个地方,其他调用的地方都会改

c、可扩展性

注意:可复用的逻辑一定要用函数写

3、函数的返回值:

a、返回多个值,Python会将多个值装到元组中返回

b、返回1个值,则返回一个object

c、无返回值,则Python默认返回None

三、函数的参数:

1、实参:即实际参数,是在调用时传递给函数的参数,必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。

2、形参:即形式参数,形参是函数被调用时用于接收实参值的变量。

3、位置参数,与形参的位置一对一对应,比如:test(4,5)

4、关键字参数,无需位置一对一对应,比如:test(x,y),调用的时候也可以写成test(y=5,x=4),因为有指定关键词,所以无需按顺序写

5、位置和关键词调用混合时:关键词参数不能写在位置参数前面,比如:

def test(x, y, z):

print("%d %d %d" % (x, y, z))

x = 1

y = 2

z = 3

test(x, y, z) # 按位置赋值

test(1, 2, 3) # 按位置赋值

test(3, z=6, y=2) # 按关键词赋值

test(1, y=2, z=3) # 如果写成test(1, y=2,3) 直接就报错了,关键词参数不能写在位置参数前面

6、默认参数:直接在形参位置赋值,作用是为函数定义一些初始默认值,省去设置麻烦,注意:定义时默认参数不能在位置参数前面

def test2(x, y, z=1): # 如果写成 def test2(x,z=1,y )就会报错,默认参数不能在位置参数前面

pass

7、*args:将所有位置参数传给函数并转换成元组,不接收关键词参数

8、**args:将所有关键词参数传递给函数并且转换成字典,不接收位置参数

def test2(yy, ii=1, *args, **kwargs):

print("yy", yy) # yy是位置参数

print("ii", ii) # ii是默认参数

print("args", args) # args将接收所有位置参数

print("kwargs", kwargs) # kwargs接收所有关键词参数

# 位置参数传入,其他参数都可以不传

test2(100)

# 关键词参数,可以调换顺序

test2(ii=100, yy=100)

# 位置参数先按位置对应传入,(3,4,5,6,7,8将被当成元组处理被args接收)

test2(1, 2, 3, 4, 5, 6, 7, 8)

# 位置参数先按位置对应传入,剩下的位置参数被args接受当成元组处理,剩下的关键词参数被kwargs当成字典处理

test2(1, 2, 3, 4, 5, 6, 7, 8, arg=10, name='tangwei')

四、局部变量和全局变量

1、局部变量:只在函数内部其作用,修改值不影响函数外面相同变量名的值

2、全局变量:在整个文件都起作用,如果函数内部要修改其值需要用到global关键字,但最好不要这样做,不然值被哪个方法修改的就不能确定。

3、就近寻找原则:如果全局和局部变量同名,那么函数内使用局部变量,函数外用全局变量。

name = "chenmeifan"

hobby = ["computer", 'read', "game"]

ii = 100

def test(name1, ii1):

global name

global ii

name = name1 # 修改全局变量的值

ii = ii1 # 修改全局变量的值,虽然这个ii与全局变量ii同名,但是依然可以赋值成功

hobby[0] = "shopping" # 修改全局变量的值

print("test...1", name, ii)

name = "tangwei"

print("test...2", test(name, 1000))

print("test...3", hobby)

五、递归函数:调用自己的函数就是递归函数

1、必须要有一个退出条件,不然就死循环,最大递归层数999次

2、效率不高,递归层次太多会导致栈溢出。

3、每次进入更深一层递归时,问题规模相比上次递归都应有所减少。

def test3(n):

if n <= 0:

return

n -= 1

print("n...",n)

test3(n)

test3(10)

六、匿名函数:没有给函数取名的函数

cou = lambda x:x*3

print(cou(3))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值