Python总结,定义函数(3)

网友投稿 252 2022-09-03

Python总结,定义函数(3)

目录

​​定义一个函数​​

​​自定义错误输出​​​​默认输出​​​​不定长参数​​

​​一个*代表元组​​​​两个*代表字典​​​​单独写`*`代表`*`后的参数必须用关键字传入​​

​​不可变类型在函数中值不会被改变​​

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回,请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。

定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。

任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

函数内容以冒号 : 起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

自定义错误输出

我们自己定义的函数错误与内置函数输出错误不一样

比如下面定义一个​​my_abs​​​等于​​abs​​​,输出错误看下 自定义求绝对值函数:

def my_abs(x): if x > 0: return x else: return -xprint(my_abs('9')) #填入字符串

输出错误:

Traceback (most recent call last): File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 7, in print(my_abs('9')) #填入字符串 File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 3, in my_abs if x > 0:TypeError: '>' not supported between instances of 'str' and 'int'

内置绝对值函数:

print(abs('9'))

输出错误:

Traceback (most recent call last): File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 1, in print(abs('9'))TypeError: bad operand type for abs(): 'str'

如果想自定义错误输出,就可以使用数据类型检查内置函数isinstance()实现:

def my_print(x,y,z): if not isinstance(x,(int,float)): raise TypeError('类型输入错误,请输入int或者float类型') nx = y + z ny = x + z nz = x + y return nx,ny,nzprint(my_print('1','2','3'))

输出错误:

Traceback (most recent call last): File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 8, in print(my_abs('1','2','3')) File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 3, in my_abs raise TypeError('类型输入错误,请输入int或者float类型')

默认输出

必选参数在前,默认参数在后,当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

当不给​​z​​​赋值时,默认​​z​​等于3

def my_print(x,y,z=3): if not isinstance(x,(int,float)): raise TypeError('类型输入错误,请输入int或者float类型') print(x,y,z) return x,y,zprint(my_print(100,200)) #不给z赋值,输出:100,200,3

不定长参数

一个*代表元组

def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression]

加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

实例(Python 3.0+)#!/usr/bin/python3 # 可写函数说明def printinfo( arg1, *vartuple ): "打印任何传入的参数" print ("输出: ") print (arg1) print (vartuple) # 调用printinfo 函数printinfo( 70, 60, 50 )

以上实例输出结果:

输出:

70(60, 50)

如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下实例:

实例(Python 3.0+)#!/usr/bin/python3 # 可写函数说明def printinfo( arg1, *vartuple ): "打印任何传入的参数" print ("输出: ") print (arg1) for var in vartuple: #遍历元组 print (var) return # 调用printinfo 函数printinfo( 10 )printinfo( 70, 60, 50 )

以上实例输出结果:

输出:

10输出:706050

还有一种就是参数带两个星号 **基本语法如下:

def functionname([formal_args,] **var_args_dict ): "函数_文档字符串" function_suite return [expression]

两个*代表字典

加了两个星号 ** 的参数会以字典的形式导入。

实例(Python 3.0+)#!/usr/bin/python3 # 可写函数说明def printinfo( arg1, **vardict ): "打印任何传入的参数" print ("输出: ") print (arg1) print (vardict) # 调用printinfo 函数printinfo(1, a=2,b=3)

以上实例输出结果:

输出:

1{'a': 2, 'b': 3}

单独写​​*​​​代表​​*​​后的参数必须用关键字传入

def f(a,b,*,c): return

如果单独出现星号 * 后的参数必须用关键字传入。

>>> def f(a,b,*,c):... return a+b+c... >>> f(1,2,3) # 报错Traceback (most recent call last): File "", line 1, in TypeError: f() takes 2 positional arguments but 3 were given>>> f(1,2,c=3) # 正常6>>>

不可变类型在函数中值不会被改变

int类型是不可变类型,列表是可变类型,所有下面的例子中​​n1​​的值没有被修改

def fun(a,b): a = 3 b.append(10)n1 =1n2 =[8,9]fun(n1,n2)print(n1,n2)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:达人营销:品牌增长必选项!(达人营销是什么)
下一篇:java通过拦截器实现项目每次执行sql耗时统计,可配置是否打印
相关文章

 发表评论

暂时没有评论,来抢沙发吧~