Python总结,定义函数(3)

简介: Python总结,定义函数(3)

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


定义一个函数


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


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

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

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

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

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

1675244476865.jpg

自定义错误输出


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

比如下面定义一个my_abs等于abs,输出错误看下

自定义求绝对值函数:

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


输出错误:



Traceback (most recent call last):
  File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 7, in <module>
    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 <module>
    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,nz
print(my_print('1','2','3'))


输出错误:

Traceback (most recent call last):
  File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 8, in <module>
    print(my_abs('1','2','3'))
  File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 3, in my_abs
    raise TypeError('类型输入错误,请输入int或者float类型')
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,z
print(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
输出:
70
60
50


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

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 a+b+c

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

>>> def f(a,b,*,c):
...     return a+b+c
... 
>>> f(1,2,3)   # 报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
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 =1
n2 =[8,9]
fun(n1,n2)
print(n1,n2)
相关文章
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
649 2
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
1821 1
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
561 0
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
457 101
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
382 99
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
713 98
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
Python
Python 函数定义
Python 函数定义
1146 155
|
PHP Python
Python format()函数高级字符串格式化详解
在 Python 中,字符串格式化是一个重要的主题,format() 函数作为一种灵活且强大的字符串格式化方法,被广泛应用。format() 函数不仅能实现基本的插入变量,还支持更多高级的格式化功能,包括数字格式、对齐、填充、日期时间格式、嵌套字段等。 今天我们将深入解析 format() 函数的高级用法,帮助你在实际编程中更高效地处理字符串格式化。
859 0
|
索引 Python 容器
[oeasy]python096_列表_计数函数_count
本教程详细介绍了Python中列表的计数方法`count`,包括其基本用法、与`len`函数的区别,以及如何结合索引操作查找和删除特定元素。同时探讨了字符串对象的`count`方法,并通过实例演示了如何统计字符出现次数。
384 7

推荐镜像

更多