函数基础

                                                                      函数

  • 为了方便代码重用,可以将代码块起一个名字进行调用
  • 语法
    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])

 

上一篇:fibnacci数列递归实现


下一篇:[luogu7599]雨林跳跃