博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 复习 4-1 函数、参数、返回值、递归
阅读量:7191 次
发布时间:2019-06-29

本文共 2984 字,大约阅读时间需要 9 分钟。

函数

  • 完成特定功能的一个语句组,这个语句组可以作为一个单位使用,并且给它组语句取一个名子,即函数名
  • 可以通过函数名在程序不同地方多次执行,即函数调用
  • 预定义函数(可以直接使用)
  • 自定义函数(自编写的)

函数的定义:

  • def 函数句([参数列表]): //定义
def hello ():    print(hello world)

函数的调用:

  • 函数名([参数列表]) //调用
hello()

函数的参数:

形式参数和实际参数

  • 在定义函数时,函数名后面的括号中的变量名称叫做 形式参数, 或者称为 形参
  • 在调用函数时,函数名后面括号中的变量名称叫做 实际参数,或都称为 实参
a = 'hello'b = 'world'def hello(x, y):    //x y 为形式参数    print('{0} {1}'.format(x, y))    hello(a, b)   // a, b 这实际参数

函数的默认参数:

  • 在定函数时,也可设置形参的缺省值 (缺省参数)
def func4(x, y=100):    print('x = {0}'.format(x))    print('y = {0}'.format(y))func4(10, 50)func4(10)"""x = 10y = 50x = 10y = 100从结果可以看出.当调用时传入第二个实参时,以传入实参为准,不传入时,默认的缺省值生效"""
  • 函数的多类型传值和冗余参数
 

*var_args_tuple 和 **var_args_dict (不定长参数)

当一个函数需要处理比声明时更多的参数时,可使用*var_args_tuple 和 **var_args_dict

var_args_tuple 传入的是一个tuple 类型
def func5(x, y,
z):

print('x = {0}'.format(x))print('y = {0}'.format(y))print('z = {0}'.format(z))print('lenth of z is: {0}'.format(len(z)))for i in z:    print(i)

func5(10, 20, 30, 40, 50, 60)

等价于

tuple_test = (30, 40, 50, 60)

func5(10, 20, tuple_test)

"""

x = 10
y = 20
z = (30, 40, 50, 60)
lenth of z is: 4
30
40
50
60
从结果可以看出,x, y,分别对应前两个实参10 20,剩余的参数30 40 50 60 做为一个元组传递给形参 z
"""

var_args_dict 传入的是一个dict 类型
def func6(a, b,
c):

print('a = {0}'.format(a))print('b = {0}'.format(b))print('c = {0}'.format(c))print(type(c))for key, valaue in c.iteritems():    print('key = {0}, valaue = {1}'.format(key, valaue))

func6(10, 50, x='hello', y='world')

等价于

dict_test = {'x':'hello', 'y':'world'}

func6(10, 50, **dict_test)
"""
a = 10
b = 50
c = {'y': 'world', 'x': 'hello'}
<type 'dict'>
key = y, valaue = world
key = x, valaue = hello

从结果可以看出,10 传给了形参a ,50 传给了形参 b , x='hello', y='world' 作为一个字典传给了 形参 c

"""

 

函数的变量

局部变量和全局变量
  • python 中的任何变量都有特定的作用域
  • 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序特定部分使用的变量我们称之为局部变量
  • 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量
x = 100   //全局变量def func():    x = 200    //局部变量    print(x)func()print(x)######200    在函数内部调用 x = 200100    在函数外部调用 X = 100
函数中操作局部变量
  • 在函数中要以调用全局变量
x = 100def fun():    print(x)fun()########100                //在函数中要以调用全局变量
  • 正常情况下了函数中不能操作全局变量
x = 100def fun():    x = x + 1    print(x)fun()######UnboundLocalError: local variable 'x' referenced before assignment   //报错
  • global 声明一个全局变量

  • 使用global 在函数中操作全局变量
x = 100def fun():    global x    x = x + 1    print(x)fun()print(x)######101     //全局变量x在函数中执行+1 操作,并打印101     // 全局变量发生改变
  • 使用global 在函数中声明全局变量
x = 100def fun():    global x    x = x + 1    print(x)    global y    y  = x + 100fun()print(x)print(y)########101101201

函数的返回值

  • 函数被调用后会返回一个指定的值
  • 函数调用后默认返回None
  • return 返回值
  • 返回值可以是任意类型
  • return 执行后,函数终止
  • return 和 print的区别

    print中是将执行结果打印出来,无法对处理结果进行再次使用

    return 可以将执行结果进行判断或赋值给变量,可以对结果进行使用

函数的递归

  • 在函数中调用本身

例:计算阶乘

正常方法

def factorial(n):    sum = 1    for n in xrange(1, n+1):        sum *= n    return sumprint(factorial(5))

使用递归

def factorial(n):    if n == 0:        return 1    else:        return n * factorial(n-1)print(factorial(5))
递归的注意事项
  • 必须有最后的默认结果 (if n == 0)
  • 递归参数必须向默认结果收敛 (n - 1)

转载于:https://www.cnblogs.com/lijunjiang2015/p/7954461.html

你可能感兴趣的文章
再看tp
查看>>
SQL Server 2012 还原选项的变化
查看>>
细节之处方显linux真功夫
查看>>
谈谈SQL Server高可用的常见问题
查看>>
Provisioning Services 7.8 入门系列教程之六 手动添加设备
查看>>
技术大牛对程序员招聘的吐槽和建议
查看>>
《未来架构师》的教学范例(2)
查看>>
Exchange 混合部署—Exchange 2007到Exchange 2013迁移
查看>>
C++构造函数和析构函数的学习(一)
查看>>
Redhat更新yum源
查看>>
jmeter企业内训简报
查看>>
你知道测试大牛怎么写测试计划的吗?
查看>>
ios程序在ios5下出现黑屏的问题
查看>>
运维APP番外篇
查看>>
Linux文件系统ext3与ext4主要区别手记
查看>>
系统集中运维管理平台【社区版】
查看>>
利用二层端口安全防止两个三层交换机长距离光纤线路被乱接测试
查看>>
《深度实践KVM》目录、前言、及前3章
查看>>
Windows Docker的有趣事实
查看>>
模拟MBR扇区故障
查看>>