前面几天学习了python的基础语法,判断,循环,以及文件操作等等内容,对python也是有了一个认识。今天开始学习python的函数和模块。
函数
- 函数是什么?
我的理解就是,他和java中的方法是一样的,表示的是一个动作,将程序的一段逻辑单独抽象出来,在其他需要的地方可以直接进行调用,而不是重复的写逻辑,即让程序变的干净整洁,也可以节约更多的时间与空间。 - 函数创建
函数是使用def语句进行创建,基本语法如下:
def functionName(arg): "functionExplain" functionContent return functionReturn ;
函数由def去定义,然后加上函数名,加上参数(括号中的,可有,可无),在加上方法说明(相当于方法的注释),方法内容(函数所要表达的动作),最后还有函数返回,当然,如果这个函数没有返回则可以直接不写。
我们看下面例子:
# -*- coding=utf-8 -*- ''' Created on 2019年1月1日 函数 @author: Administrator ''' def printTest (num = 1) : print("*" * num);
我们如果只这样写一个函数,直接run的时候发现,其实没有任何的东西打印出来,因为这里只是定义了函数,要想让函数执行,我们必须调用函数才可以。
# -*- coding=utf-8 -*- ''' Created on 2019年1月1日 函数 @author: Administrator ''' def printTest (num = 1) : print("*" * num); printTest(5);
这样才会后5个“*”号打印出来。
如果我们需要一个函数执行之后,想得到执行后的结果,那么我们可以在最后加上return语句
def printTest (num = 1) : print("*" * num); return "seccess"; str = printTest(5); print(str);
这样,当我们输出str的值的时候就可以得到“seccess”,当然,如果我们函数没有return语句,则默认返回None。
下面我们将之前写过的一个根据用户输入的数生成斐波那契数列的例子用一个函数去表示:
# -*- coding=utf-8 -*- ''' Created on 2019年1月1日 函数 @author: Administrator ''' def fibonacci (num=2) : "生成长度为num的斐波那契数列" num = num - 2; fid = [0, 1]; if num < 0 : print("请输入大于2的数字:"); return; for i in range(num) : fid.append(fid[-1] + fid[-2]); else : return fid; num = int(input("请输入一个大于2的数字:")); fid = fibonacci(num); print(fid);
- 形式参数
上面例子中,我在定义fibonacci函数时在括号中写了一个num=2,其中这里的num表示形式参数,简称形参,它写在函数名的后面的括号中,因为他不是实际存在的参数,所以叫做形参,也 被叫做虚拟参数。 - 实际参数
实际参数就是在实际调用函数时传入的参数,它是实际存在的。
我在下面调用fibonacci函数时,将用户输入的数字作为实参传给了 fibonacci 函数。而且在上面例子中,我默认num等于2,如果在调用这个函数时,不传入实参,则num默认实参为2. - 传递参数
调用函数时,实参的个数需要和形参的个数一致,并且将实参依次传递给形参。 - 位置参数
与shell脚本一样,python脚本也可以将位置参数传入模块中,其中可以使用sys模块的argv列表进行接收。
#!/usr/bin/env python import sys; print sys.argv;
上述例子由于要直接执行python脚本,所以就不在ide中执行,我直接打开我的云,在云上写的一个简单的小例子,下面是我执行两次的结果:
[root@iZwz963wlhi02sxk6nk1j5Z python]# ./hello.py ['./hello.py'] [root@iZwz963wlhi02sxk6nk1j5Z python]# ./hello.py hello word ['./hello.py', 'hello', 'word']
第一次没有传任何参数,所以argv数组中就只有1个元素,第二次执行,传了2个参数,所以argv数组中则有3个参数。需要注意的是,这里传入的参数都是字符串类型的。
-------------------- END ---------------------
最后附上作者的微信公众号地址和博客地址
公众号:wuyouxin_gzh