(python在财务中的应用论文)(python 财务应用)

(python在财务中的应用论文)(python 财务应用)

引言:

通过上一章节的学习,我们已经能够利用给定的条件计算出连续12个月的折旧了,但是,如果我想要使这个算法能作用到另外一个固定资产,却发现不得复制一下,并且修改资产原值、折旧年限等等变量赋值。那么有没有更便捷的方法呢?本章我们将用python函数来解决这个问题。

01 内置函数

首先我们来看看到底什么是函数?

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。

你已经知道Python提供了许多内置函数,比如print(),input(),round()等,这些函数可以直接在代码中调用过来,下面我们来回忆一下round函数的调用过程。

round(10.2345,2) #内置函数调用

#输出:10.23

输出的10.23,我们称之为函数的返回值。

但是如果你想实现的功能内置函数无法帮你完成,你也可以自己创建函数,这被叫做自定义函数。

02 自定义函数

用一些符号代替变量赋值,等到使用这个算法的时候再把具体的变量金额填充进去,将原先适用于一种情况的算法改造成一个通用的算法,这个过程就叫自定义函数。代替变量叫形参,使用算法叫做调用函数,调用函数时填充的具体金额叫实参。

自定义函数的语法:

#def是定义函数的关键字。

def 函数名(形参) : # 定义函数时指定形参,参数也可以为空。注意冒号

<代码块>

return # return语句不写时,没有返回值

函数名(实参) #调用函数时传递实参

小贴士:程序中函数完成一件事情后,最后给调用者的结果,称为函数的“返回值”,想要在函数中把结果返回给调用者,就需要在函数中使用return。

我们参照函数语法改造上个章节计算12个月固定资产折旧的案例吧:

#计算固定资产折旧函数

def calcdep(amount,year,srate,depope):

#改造的关键是参数设置

scrap= amount* srate

drate=1/year/12

depinc=0

listdep=[]

for i in range(12):

depope+=depinc

depinc= round(amount* drate,2) #本期折旧

netamount=amount- depope-depinc - scrap #固定资产净值

if netamount>0:

depinc = depinc

else:

depinc= round((amount- depope - scrap),2)

listdep.append(depinc)

print ('1-12月折旧额为',listdep)

#有了函数后,就可以重复计算了

calcdep(10000,5,0.05,8333.5)

calcdep(10000,5,0.05,1000)

calcdep(12000,4,0.03,8000)

#1-12月折旧额为 [166.67, 166.67, 166.67, 166.67, 166.67, 166.67, 166.48, 0.0, 0.0, 0.0, 0.0, 0.0]

#1-12月折旧额为 [166.67, 166.67, 166.67, 166.67, 166.67, 166.67, 166.67, 166.67, 166.67, 166.67, 166.67, 166.67]

#1-12月折旧额为 [250.0, 250.0, 250.0, 250.0, 250.0, 250.0, 250.0, 250.0, 250.0, 250.0, 250.0, 250.0]

03 函数的参数

上文中我们已经讲到,调用函数时是可以传递参数的,以下是函数调用时可使用的参数类型:

  • 位置参数
  • 关键字参数
  • 默认参数
  • 不定长参数

位置参数

位置参数就是将对应位置的实参传递给对应位置的形参。

第一个实参赋值给第一个形参,第二个实参赋值给第二个形参等等。

def fn(a,b,c) :

print(a,b,c)

fn('甲','乙','丙') #甲 乙 丙

默认参数

定义形参时,可以为形参指定默认值。调用函数时,如果参数的值没有传入,则被认为是默认值,如果用户传递了参数,则默认值没有任何作用。

def fn(a,b,c='丁') :

print(a,b,c)

fn('甲','乙','丙') #甲 乙 丙

fn('甲','乙') #甲 乙 丁

关键字参数

关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数

def fn(a,b,c) :

print(a,b,c)

fn(b='甲',c='乙',a='丙') #丙 甲 乙

可变参数

在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到不定长的实参

def fn(*a) :

print(a)

fn('甲','乙','丙') #('甲', '乙', '丙')

注意,此时输出的结果有个括号,这是因为传递值到可变参数时,python会将所有的实参保存到一个元组中。

*形参只能接收位置参数,而不能接收关键字参数,如果要接受不定长的关键字参数,可以在参数名前加两个*号。**形参可以接收不定长的关键字参数,并将这些参数统一保存到一个字典中。

def fn(**a) :

print(a)

fn(b='甲',c='乙',a='丙') # {'b': '甲', 'c': '乙', 'a': '丙'}

参数组合

在Python中定义函数,可以用位置参数、默认参数、关键字参数、可变参数,这4种参数都可以组合使用。但是请注意,参数定义的顺序必须是:位置参数、默认参数、关键字参数和可变参数。

def fn(a,b,*c,d,**e) : #位置参数->可变位置参数->关键字参数->可变关键字参数

print(a,b,c,d,e)

fn('甲','乙','丙','丁',d='戊',m='己',n='庚') #甲 乙 ('丙', '丁') 戊 {'m': '己', 'n': '庚'}

04 变量的作用域

让我们先来试一下这段程序。

b = 20

def fn():

a = 10

c = 30

print('a =',a)

print('b =',b) #在函数内部print b 成功

fn()

print('c =',c) #在函数外部print c 失败

运行上述语句,我们发现a和b输出结果,但是c却报错了。这就需要了解从作用域说起了。

作用域指的是变量生效的区域,在Python中一共有两种作用域。

  • 全局作用域
    • 全局作用域在程序执行时创建,在程序执行结束时销毁
    • 所有函数以外的区域都是全局作用域
    • 在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问
  • 局部/函数作用域
    • 局部作用域在函数调用时创建,在调用结束时销毁
    • 局部每调用一次就会产生一个新的函数作用域
    • 在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问

变量的查找

  • 当我们使用变量时,会优先在当前作用域中寻找该变量,如果有则使用,
  • 如果没有则继续去上一级作用域中寻找,如果有则使用,
  • 如果依然没有则继续去上一级作用域中寻找,以此类推
  • 直到找到全局作用域,依然没有找到,则会抛出异常

这也就解释了,为什么在函数内部print b 成功,在函数外部print c 失败。

global

那么有没有办法修改局部变量的作用域区间,使其在全局范围内可用呢,答案是确定的,可以用global实现。

我们用global改造一下开头的例子:

b = 20

def fn():

global c

a = 10

c = 30

print('a =',a)

print('b =',b) #在函数内部print b 成功

fn()

print('c =',c) #在函数外部print c 成功

声明:我要去上班所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者财码所有,原文出处。若您的权利被侵害,请联系删除。

本文标题:(python在财务中的应用论文)(python 财务应用)
本文链接:https://www.51qsb.cn/article/m8dzw.html

(0)
打赏微信扫一扫微信扫一扫QQ扫一扫QQ扫一扫
上一篇2022-12-30
下一篇2022-12-30

你可能还想知道

发表回复

登录后才能评论