Python基础之函数

发布时间:2026/7/29 7:24:18

Python基础之函数 Python基础之函数函数函数就是一段封装好的可以重复使用的代码在封装时给它起一个独一无二的名字只要知道它的名字就能使用这段代码还可以接收数据并根据数据的不同做出不同的操作最后再把处理结果反馈给我们。概念点代码重复利用代码进行封装可接收处理数据python常用内置函数在builtins.py中可以直接使用print() # 输出 type() # 返回类型 id() # 返回内存地址 input() # 输入 len() # 返回长度 open() # 打开文件 round() #返回浮点数x的四舍五入值 abs() # 取绝对值函数调用调用函数也就是执行函数。如果把创建的函数理解为一个具有某种用途的工具那么调用函数就相当于使用该工具。在Python中调用一个函数需要知道这个函数的名称和传入参数a1 abs(-1) print(a1) # 1 a2 abs(-1,-2) print(a2) # TypeError: abs() takes exactly one argument (2 given) a3 abs(a) print(a3) # TypeError: bad operand type for abs(): str 函数名其实就是指向一个函数对象的引用完全可以把函数名赋给一个变量相当于给这个函数起了一个“别名” a4 abs # 变量a4指向abs函数 print(a4) # built-in function abs print(a4(-1)) # 1调用函数的时候如果传入的参数数量不对会报TypeError的错误并且Python会明确地告诉你abs()有且仅有1个参数但给出了两个如果传入的参数数量是对的但参数类型不能被函数所接受也会报TypeError的错误并且给出错误信息str是错误的参数类型自定义一个函数除了可以直接使用的内置函数外Python 还支持自定义函数即将一段有规律的、可重复使用的代码定义成函数从而达到一次编写、多次调用的目的。Python中定义一个函数创建一个函数使用 def 关键字def函数名参数: 通过语句块缩进来编写函数体通过 return 来返回值语法格式def 函数名(参数): # 函数名就是python的语法的标识符函数名最好能够体现出该函数的功能 实现特定功能的多行代码 [return [返回值]] # return为非必须是否需要return值要根据该函数具体实现的功能决定def add(x,y): sum x y return sum a add(2,3) print(a) # 5 def add(x,y): sum x y a add(2,3) print(a) # None注函数需要return来把数据返回给外部调用如果不写return函数默认return None在创建函数时如果该函数没有参数也必须保留函数在内部执行语句时一旦执行到return函数就执行完毕并把结果返回即使return下面有同样缩进的语句块但并不会执行def add(x,y): sum x y return sum print(这是函数中return后的语句) # 在调用函数时该print语句并不会被执行空函数有确定的 def函数名参数: 在函数体中用 pass 代替实际的代码语句def func(): pass # pass语句什么都不做实际上 pass 通常作为代码的占位符在程序框架设计中常用返回多个值函数通过 return 返回单个值同样也可返回多个值def names(x,y): name_1 x name_2 y return name_1, name_2 n names(Jack,Flack) print(n) # 返回(Jack, Flack) print(type(n)) # 返回类型 class tuplePython中函数return多个值时返回类型为 tuple元祖tuple中包含多个值注当一个函数有reutrn时我们在调用这个函数时需要自定义一个变量来接收函数return的值任务定义一个函数传入参数为一个整数列表, 如list_num [1,2,3,4,5,6......n]对这个list 按 112233....nn 累加返回这个累加值。函数的参数函数参数的作用是传递数据给函数内部令其对接收的数据做具体的操作处理位置参数有时也称必备参数指的是必须按照正确的顺序将实际参数传到函数中换句话说调用函数时传入实际参数的数量和位置都必须和定义函数时保持一致。Python函数的定义比较灵活除正常定义位置参数必备参数外还可以使用默认参数、可变参数和关键字参数在处理复杂参数的同时方便简化调用定义一个函数实现x*x1的计算 def formula(x): return x*x1对于函数 formula(x) 参数 x 就是一个必填参数也是形参当我们调用 formula函数时就必须传入并且只能传入一个参数 3或者其他实际数值也就是实参注意形参与实参的数量必须保持一致a1 formula(3) # 调用formula函数参数传入3等同于x3把formula返回的对象赋值给变量a1 print(a1) # 10 a2 formula(x4) print(a2) # 17上面代码展示了对函数中参数两种赋值方式一种通过位置隐式的把3赋值给参数x属于位置传参另一种通过赋值符号 “” 显式把4赋值给参数x属于关键字传参关键字参数关键字参数是指使用形式参数的名字来确定输入的参数值。通过此方式指定函数实参时不再需要与形参的位置完全一致只要将参数名写正确即可。现在如果要通过函数来实现 x*x y在formula的参数中就需要传入x, y两个参数定义一个函数实现x*xy的计算 def formula(x,y): return x*xy res_1 formula(3,2) # 调用formula函数时根据参数位置关系位置传参传入的参数为3和2按照位置相当于x3,y2结果为11 res_2 formula(2,3) # 调用formula函数时根据参数位置关系传入的参数为2和3按照位置相当于x2,y3,结果为7 res_3 formula(x3,y2) # 调用formula函数时显式的给x,y参数赋值x3,y2关键字传参结果为11需要注意混合传参时关键字参数必须位于所有的位置参数之后否则Python 解释器会报如下错误定义一个函数实现x*xy的计算 def formula(x,y): return x*xy res_4 formula(x4, 5) #此处关键字传参在位置传参前Python解释器会报错SyntaxError: positional argument follows keyword argument默认参数根据 formula函数如果实际工作中这个函数更多的是用来计算 xx1但我们也需要这个函数能计算 xxy为了简化代码调用可以给 y 指定一个默认参数 y1def formula(x,y1): return x*xy a5 formula(3) # 调用formula函数时虽然只传入的参数x3但定义函数时默认y1等价于 formula(3,1)所以结果为10从上面例子可以看到默认参数可以简化函数的调用当参数y在定义函数时指定了默认值后在后续其他代码调用该函数时y参数可不传入参数非必填参数当y不传入参数时y取默认值当y被传入参数时y取最新的值需要注意定义函数时必选参数放前默认参数放后def formula(x3,y): # SyntaxError: non-default argument follows default argument return x*xy上面代码把x3定义为默认参数y为必选参数解释器会报错SyntaxError: non-default argument follows default argument可变参数例当我们需要定义一个函数实现aabbccdd.......n*nn为任意数def formula(*numbers): # *numbers为可变参数(numbers类型为元祖用于接收任意个传入的参数),即调用该formula函数时可传入任意数量参数 sum 0 print(type(numbers),numbers) # class tuple numbers类型为元祖 for i in numbers: sum i*i return sum a6 formula(1) # 此时可变参数numbers接收的参数是1numbers (1,),结果为1 a7 formula(1,2,3) # 此时可变参数numbers接收的参数是1,2,3numbers(1,2,3),结果为14如果需要传入的参数是一个list或tuple可通过*参数来对list或tuple解包n [1,2,3,4] a8 formula(*n) # *n作用是把n中的元素全部取出放入numbers元祖中等价于formula(1,2,3,4)通过 *n 把 n这个list中所有元素解包后作为可变参数传入函数是一种常用方法可变关键字参数可变关键字参数允许传入0个或任意个带参数名的参数这些关键字参数在函数内部以字典的形式存储定义一个函数存储学生信息 def student_info(name, age, **kw): student_name name student_age age other_inf kw # **kw是以字典类型来存储传入的关键字参数 print(other_inf类型,type(other_inf)) print(student_name, student_age, other_inf) a9 student_info(Jie,18) # key_values类型 class dict # Jie 18 {} a10 student_info(Jie,18,cityShanghai,countryChina) # other_inf类型 class dict # Jie 18 {city: Shanghai, country: China}把一个已定义的字典作为关键字参数传入 student_info函数可通过 **变量名 实现more_info {city: Shanghai, country: China} a11 student_info(Jie,18,**more_info) # **more_info作用是把字典more_info中的key:value解包后作为关键字参数以字典形式存入kw中注意**more_info 只是对more_info拷贝因此在函数内更改这个more_info是不会对原来的more_info产生影响的参数组合在Python中定义函数时可以用必选参数、默认参数、可变参数、关键字参数组合使用参数定义的顺序必选参数-可变参数-默认参数-关键字参数def func_1(a,b,*args,c3,**kw): print(f参数a{a},参数b{b},可变参数args{args},参数c{c},关键字参数kw{kw}) a12 func_1(1,2) # 参数a1,参数b2,参数c3,可变参数args(),关键字参数kw{} a13 func_1(1,2,4,A,B,kD,vE) # 参数a1,参数b2,可变参数args(4, A, B),参数c3,关键字参数kw{k: D, v: E}小结1、Python函数定义中参数形态比较灵活可以传入复杂的参数方便简单调用2、必选参数必须在默认参数之前 3、可变参数 *args接收一个tuple4、可变关键字参数 **kw, 接收一个dict5、可变参数可直接传入例func(1,2,3)又可以通过list或tuple再通过解包的方式传入func((1,2,3))6、关键字参数可直接传入func(x1,y2)又可以通过dict经过解包方式传入func({k1,v1}7、参数组合时参数定义顺序必选参数-可变参数-默认参数-可变关键字参数

相关新闻