python函数调用追踪_python-函数(上):函数返回值、函数调用、前向引用

编程方法:

1、面向对象:类--class

2、面向过程:过程--def

3、函数式编程:函数--def

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

python中函数定义方法:

deftest(x):"The function definitions"x+=1

return x

def:定义函数的关键字

test :函数名

():内可定义形参

“”:文档描述(非必要,但是强烈建议为你的函数添加描述信息)

x+=1:泛指代码块或程序处理逻辑

return:定义返回值

#函数

deffunc1():"testing1"

print("in the func1")return 0

#过程

deffunc2():"testing2"

print("in the func2")

x=func1()

y=func2()print("from func1 return is %s"%x)print("from func2 return is %s"%y)

使用函数的三大优点:

1.代码重用

2.保持一致性

3.可扩展性

函数返回值

返回值数=0:返回None(没有return的情况)

返回值数=1:返回object

返回值数>1:返回tuple(返回一个元组)

如:

deftest01():pass

deftest02():return0deftest03():return 0,10,'Hello',['alex','lb'],{'WuDaLang':'lb'}

t1=test01()

t2=test02()

t3=test03()print("from test01 return is [%s]:"%type(t1),t1)print("from test01 return is [%s]:"%type(t2),t2)print("from test01 return is [%s]:"%type(t3),t3)

函数调用

调用方法:

1.test()执行,()表示调用函数test,()内可用有参数也可以没有

参数:

1.形参和实参

形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与形参一一对应)

实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参

区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参

2.位置参数和关键字(标准调用:实参和形参位置一一对应;关键字调用:位置无需固定)

deftest(x,y):print(x)print(y)

test(1,2) #位置参数调用,与形参一一对应

test(y=2,x=1) #关键字调用,与形参顺序无关

test(3,y=2) #混合使用时,关键字参数是不能写在位置参数前面的

3.默认参数

def test(x,y=2):print(x)print(y)

test(1)

test(1,y=3)

test(1,3)#默认参数特点:调用函数的时候,默认参数非必须传递

4.参数组

#*args: 接受N个位置参数,转换成元组形式

def test(*args): #参数不固定

print(args)

test(1,3,2,4,5)

test(*[1,2,4,5,5]) #args = tuple([1,2,4,5,5])

def test1(x,*args):print(x)print(args)

test1(1,2,3,4,5,6,7)

#**kwargs:接受N个关键字参数,转换成字典的方式

def test2(**kwargs):print(kwargs)print(kwargs['name'])print(kwargs['age'])print(kwargs['sex'])

test2(name='alex',age=8,sex='F')

test2(**{'name':'alex','age':8,'sex':'F'})def test3(name,**kwargs):print(name)print(kwargs)

test3('alex') #后面接收一个空字典

test3('alex',age=18,sex='m')def test4(name,age=18,**kwargs): #参数组要放后面

print(name)print(age)print(kwargs)

test4('alex',sex='m',hobby='tesla')

test4('alex',5,sex='m',hobby='tesla')

test4('alex',sex='m',hobby='tesla',age=3)def test5(name,age=18,*args,**kwargs): #参数组要放后面

print(name)print(age)print(args)print(kwargs)

test5('alex',age=34,sex='m',hobby='tesla')

前向引用

函数action体嵌套某一函数logger,该logger的声明必须早于action的调用,否则报错

defaction():print("in the action")

logger()

action()deflogger():print("in the logger")#报错:NameError: name 'logger' is not defined

deflogger():print("in the logger")defaction():print("in the action")

logger()

action()

defaction():print("in the action")

logger()deflogger():print("in the logger")

action()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值