函数
- 为了方便代码重用,可以将代码块起一个名字进行调用
- 语法
def 函数名(参数...):
代码块 - 定义函数时,只是声明有这样一个功能,函数体内代码不执行
- 如果需要执行函数内的代码,必须明确进行调用
def mk_fib():
fib=[0, 1]
n = int(input("请用户输入长度: "))
for i in range(n - 2):
fib.append(fib[-1] + fib[-2])
print(fib)
mk_fib() #调用函数,就是将函数体内的代码执行一次
返回值
- 函数运行完毕后,将会有一个结果。
- 通过return语句,将结果返回。
- 如果没有return,默认返回None。None是关键字。
>>> def func1():
... a = 10 + 20
...
>>> result = func1() #函数没有return,默认返回None
>>> print(result)
None
>>> def func1():
... a = 10 + 20
... b = a * 3
... return "hello World"
...
>>> result = func1()
>>> print(result)
hello World
参数
- 函数定义时,紧跟在函数名(圆括号内)的参数被称为形式参数,简称为形参。
- 在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”,简称实参。
>>> def pster(n):
... print('*' * n)
...
>>> pster(10)
**********
>>> pster(30)
******************************
脚本改进:
def mk_fib(n):
fib = [0, 1]
for i in range(n - 2):
fib.append(fib[-1] + fib[-2])
return fib
r1 = mk_fib(10)
print(r1)
a = int(input("长度: "))
r2 = mk_fib(a)
print(r2)
########################################################
提供了默认值的参数,是默认参数
>>> def pster(n=30): #n=30是默认参数
... print('*' * n)
...
>>> pster() #pster是默认参数
******************************
>>> pster(50) #给了个50是重新赋值
**************************************************
#############################################################################
位置参数
- python将命令行上的位置参数,保存到sys模块的argv列表中
- sys.argv[0],相当于$0;sys.argv[1],相当于$1.
[root@node01 ~]# cat weizhi.py
import sys
print(sys.argv)
#python3 weizhi.py hao 123
['weizhi.py', 'hao', '123'] #weizhi.py是0,hao是1,123是2
##########################
改进copy脚本,可以拷贝任意的文件 如: /bin/ls 拷贝到/tmp/list
import sys
def copy(src_fname, dst_fname):
src_fobj = open(src_fname,'rb')
dst_fobj = open(dst_fname,'wb')
while 1:
data = src_fobj.read(4096)
if not data:
break
dst_fobj.write(data)
src_fobj.close()
dst_fobj.close()
copy(sys.argv[1], sys.argv[2])