python 如果有函数_python 函数

一、定义一个最简单的函数

函数定义用def,必须要有函数名和函数体。下图中,函数名是sayHello,函数体是print语句。函数不被调用是不会执行的,调用时用函数名+括号的格式,即sayHello()

e1574de2514bf0ca539303165e09dae3.png

二、函数的参数

1、位置参数

位置参数,是必填的,调用函数时不传会报错。

我们写一个简单的函数,实现计算乘法的功能。下图中的a和b就是位置参数。

a,b叫做形参,也就是形式参数。调用函数calc时,传的7和8叫实参,也就是实际参数。

77da916f204b9e5b189c26c666ca5fc0.png

我们可以看到传参数时,7传给了a,8传给了b。也就是说传参顺序不能错。那么,当参数很多的时候,很难准确的记住各参数位置,就很容易出现错误,可以用 形参名=实参 的方式传参。

例,操作数据库的函数。传参没有按顺序,采用了port = '3306'这种方式,很适合多参数的函数。

48304ba5e6f9fe08f3fa1abda7d326ab.png

def op_mysql(host,port,username,password,db,sql):

print('连接数据库:%s,host:%s,端口为:%s'%(db,host,port))

print("%s where username='%s and pwd = '%s'"%(sql,username,password))

op_mysql(sql='select * from user',

host='192.158.11.1',

username='sdfdsfs',

password='sdf123',

db='test_data',

port='3306'

)

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果为:

fe6d03048699ccc5a168bc6288bdaabb.png

2、默认值参数

默认值参数是非必填的,如果不填,会采用默认值。

例:写一个函数,实现文件读写的功能。

48304ba5e6f9fe08f3fa1abda7d326ab.png

# 操作文件的函数,如果传内容参数,则将对应内容写入文件。没有传内容,就读取文件原来的内容。

def op_file(file_name,content=None):

f = open(file_name, 'a+', encoding='utf-8')

f.seek(0)

if content:#不为空代表写

f.write(content)

f.flush()

else:

res = f.read()

return res

f.close()

# 不传content,读文件

stu_info = op_file('username')

print(stu_info)

# 传content,将content写入文件

infos = 'xiaohei,123456,beijing,188888888888'

op_file('new_info',infos)

48304ba5e6f9fe08f3fa1abda7d326ab.png

这里介绍一下return,return有两个作用:(1)调用完函数后,将结果返回;(2)函数里面遇到return就立即结束。

另外,如果只写一个return,后面什么也不加,就返回None;如果不写return,也默认返回None。

小练习:写一个判断是否为小数的函数。

分析:(1)判断小数点个数;(2)如果是正小数,小数点左边和右边都是纯数字;(3)负小数,左边以‘-’开头,其他部分是数字,右边是数字。

48304ba5e6f9fe08f3fa1abda7d326ab.png

def is_float(s):

s = str(s)

if s.count('.') == 1:

left = s.split('.')[0]#小数左边

right = s.split('.')[1]#小数右边

if left.isdigit() and right.isdigit():

return True# 正小数

elif left.startswith('-') and left.count('-') == 1 and left.split('-')[1].isdigit() and right.isdigit():

return True# 负小数

else:

return False

else:

return False

num = input('请输入:')

res = is_float(num)

print(res)

48304ba5e6f9fe08f3fa1abda7d326ab.png

3、参数组

参数组的参数处用“*args”表示。参数组特点:(1)参数是非必填的;(2)没有限制参数的个数;(3)传过来的参数放到args参数里,不限格式

08e6486cd010be1e5ff2c0ca76992b23.png  

d01fa86a509a6129eeac4ab60b975e43.png

如果定义函数时,写成 def aaa(a,*args),则a是必传参数,*args是非必填的

4、关键字参数

关键字参数用“**kwargs”表示。特点:(1)参数是非必填;(2)没有限制参数个数;(3)所传参数必须是字典格式。

add19b3ef9028226646cecc76779f496.png  

cdcf3c94e485a4ec2ed7125573573ca8.png

同样的,如果def aaa(time,**kwargs),则time参数必传。其中,time='20180912'是第一个参数time的值,因此输出kwargs时,没有time这一项。

20f52b0249845ab4ba053a1163c50ff3.png  

41e11fe723f4e8e74a467159e9022c77.png

三、局部变量和全局变量

1、局部变量

函数里面定义的变量都是局部变量,只能在函数里面用,出了函数就不能用了。

例如,第二节的小练习里,判断是否是小数的函数,left和right就是局部变量。

2、全局变量

全局变量是公共的变量,都可以用的变量。一般不推荐用全局变量,因为全局变量有以下2个缺点:(1)不安全,因为所有人都可以改;(2)会一直占着内存。

修改全局变量,需要先声明,用global声明。

下图中,name是一个全局变量,修改之前需要先声明:global name

e0dd91eaf3e46336daaa4a61505d7feb.png

四、内置函数

内置函数就是python里自带的一些函数,有很多,比如:

31a10f384b4002abf8740be8c1ee2971.png

五、递归

递归就是函数自己调用自己。

建议少用递归,因为递归效率不高,而且最多递归999次。由下面的函数能够很直观的看出递归次数上限。

de95f3c0344814a291eef9f3c5870ffa.png  

469d11c59bad4a8101f706e19bd6a0f6.png

六、函数的返回值

前面已经简单介绍过return,return有两个作用:(1)调用完函数后,将结果返回;(2)函数里面遇到return就立即结束。

有的函数不只有一个返回值,函数如果返回多个值的话,会把这几个值放到一个元组里。另外,也可以用多个值来接收。

例:

5feb2995947df02ac9d799f4857de666.png  

71bc3f988e1b0a427bec06c9f50e38b9.png

b79456aa76aa60b886098f312308de2e.png   

e5e552a585f88f3e0f2113975cf02c82.png

七、匿名函数

匿名函数的功能很简单,只用一次。下面就定义了一个匿名函数。

用lambda定义匿名函数,冒号前面是返回值,后面是函数体,也就是函数的处理逻辑。

即入参是x,然后执行x+1,把x的值返回。

016d396bcf2d7d6c5191ee8cb389005b.png   

9d059f38490f76ad28009481c8f7526d.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值