python自学(四)——函数的学习

一、函数的特点

终于学到函数啦。本质相同,略有区别,总结一下:

1.1 形式上的区别
  1. 没有大括号包裹的代码块,缩紧进行区分
  2. def 声明 ,等价于function
  3. 冒号不能省略
1.2 调用的区别
  1. 传参严格按照函数的声明,否则会报错
  2. 可以有多个返回值,但是本质还是返回了一个tuple

作业:请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程 ax^2+bx+c=0 的两个解。

#!/usr/bin/env python3
#-*- encoding:utf-8 -*-
import math
def test():
	a =int(input("请输入第一个数据a: "))
	b = int(input("请输入第二个数据b: "))
	c = int(input("请输入第三个数据c: "))
	tempSq = math.sqrt(b*b-4*a*c)
	y1 = (tempSq-b)/(2*a)
	y2 = (-b-tempSq)/(2*a)
	print((a,b,c),"的平方根是:",(y1,y2))
test() // 因为我是直接运行这个文件,所以在这个文件里直接执行了

在这里插入图片描述

二、函数的参数

2.1 默认参数

有点类似与javascript es6的新特性,定义函数时可以声明参数的默认值:

def f(a,b,c=1,d="测试")

这样的优势很明显,让我们可以更加灵活的来调用这个函数
需要注意一点,这个默认参数的初始化要是一个不可变的对象

2.2 参数数量可变
def calc(*numbers): // 声明
calc(1, 2) // 调用
calc() // 调用

这个有点类似与c++里面的指针的感觉,传入函数的只是一个list的地址,应该是调用时,可变参数,会把传入的参数赋给一个tuple,然后再把一个list的地址传入函数。
在这里插入图片描述
其中需要注意的是,如果传入本身就是一个list,如果不带*,会默认把list作为一个参数传入进去,带参数,会把list的子元素作为参数传入。

2.3 关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict;

def person(name, age, **kw): // 比可变参数多了一个*,肯定更牛

demo

	def f3(a,b,**c): // 声明
...     print(c)
	f3(1,2,test='3')
		{'test': '3'} // 打印

可以看出,他是把除了必填参数之外的数据,均放到了一个dict中了

2.4 命名关键字参数

和上面不同的是,命名关键字参数可以约束,你需要传的值
在这里插入图片描述
可以看到,如果少传入一个数据,会导致报错

需要注意的是,如果参数中有可变参数,* 可以省去,否则不可以;

2.5 参数组合使用

参数可以混合使用,但是参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

练习题:
定义一个可以接收一个或多个数并计算乘积的函数

#!/usr/bin/env python3
#encoding=utf-8
def f(*n):
        m = 1
        for x in n:
                m = m*x
        print(m)
f(1)
f(1,2)
f(1,2,3)
f(1,2,3,4)

在这里插入图片描述

发布了60 篇原创文章 · 获赞 66 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u012436704/article/details/95511159