1、何为函数
1、首先我们来了解一下在Python中何为函数。
简单说,函数是用特定的语法定义,可实现一定功能的,或者相关功能的,可重复执行的代码段。
不管如何一种编程语言,我们都应该知道这两点:
- 写重复代码是极不好的,是不符合我们程序员的高贵气质的
- 我们以后写的代码可能需要经常修改,不断维护和迭代,用长远的眼光写代码
这时候,函数、模块、类就出现了。
函数的作用:
- 能提高代码的重复利用率-------需要的时候就调用,不用反复写相同的代码
- 提高了应用的模块型--------将功能分门别类,比如一个函数定义一个功能,使代码和功能井井有条
- 提高了阅读性,降低了维护难度, ----------就好比注释一样,起一个见名知意的函数名,代码格式优良,不仅自己写代码的时候心中有数,将来维护的兄弟也会万分感谢。
2、如何定义函数
既然函数这么好,那怎么定义呢?
1.语法
我们举一个最简单的例子:
# 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
def print_hello(fri): # 圆括号之间可以用于定义参数
for i in range(fri):
print("Hello World")
print_hello(20) # 函数将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
附:C++和java里面的函数是怎么定义的
/* C++ 中的函数定义的一般如下:
return_type function_name( parameter list )
{
body of the function
}*/
// 函数返回两个数中较大的那个数
int max(int num1, int num2) # 形参
{
// 局部变量声明
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
//java中定义函数:
/*修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}*/
/* 返回两个整数变量较大的值 */
public static int max(int num1, int num2) #形参
{
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
3、函数的实参和形参
形参也称为形式参数,既然提到形式,就是说它定义参数的类型和个数,如在C++和java这种强类型语言中,在编译的时候对数据类型进行严格检查,一旦类型写错了,编译都通不过。
但在Python中,类型属于典型,因此变量是没有类型的,也就谈不上指定形参、实参或者变量的数据类型了。所以形参在Python的功能就是定义了要传入参数的个数。
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
2、默认参数
def stu_register(name,age,country,course):
print("----注册学生信息------")
print("姓名:",name)
print("age:",age)
print("国籍:",country)
print("课程:",course)
stu_register("stu1",20,"CN","python")
stu_register("stu2",21,"CN","C++")
stu_register("stu3",19,"CN","Linux")
发现 country 这个参数 基本都 是"CN", 就像我们在网站上注册用户,像国籍这种信息,你不填写,默认就会是 中国, 这就是通过默认参数实现的,把country变成默认参数非常简单
def stu_register(name,age,course,country="CN"):
|
4、关键参数
给函数传参数要按位置形参的顺序,赋值时形参与实参的值一一对应。不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。
stu_register(age=22,name='Echo',course="python",) #调用函数并传参
5、非固定参数
如果在函数定义时不能确定将来传入的实参有多少个,可以使用非固定参数。
def stu_register(name,age,*args): # *args 会把多传入的参数变成一个元组形式
print(name,age,args)
stu_register("Echo",22)
#输出
#Alex 22 () #后面这个()就是args,只是因为没传值,所以为空
stu_register("Jack",22,"CN","Python")
#输出
# Jack 32 ('CN', 'Python')
for i in range(20):
print_hello()
还可以有一个**kwargs :把多传入的参数当做一个字典的形式
def stu_register(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式
print(name,age,args,kwargs)
stu_register("Echo",20)
#输出
#Echo 20 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空字典,列表也为空
stu_register("Alex",33,"CN","Python",sex="Male",province="ShanDong")
#输出
# Alex 33 ('CN', 'Python') {'province': 'GuangDong', 'sex': 'Male')
6、全局变量和局部变量
Python在这一点上其实和C++、Java非常相似。
局部变量即是定义在局部代码块里面的变量,在C++、Java中{} 即是一个代码块,出了这个大括号都无法调用里面的变量。
全局变量在程序的一开始定义的变量称为全局变量,作用域是整个程序。
7、返回值
函数执行完后的结果可以通过return 扔出来,支持其他模块的继续执行。
应该注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None