函数

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

函数的定义:

  • 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 = 10
y = 50 x = 10
y = 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 = 200
100 在函数外部调用 X = 100
函数中操作局部变量
  • 在函数中要以调用全局变量
x = 100

def fun():
print(x) fun()
########
100 //在函数中要以调用全局变量
  • 正常情况下了函数中不能操作全局变量
x = 100

def fun():
x = x + 1
print(x) fun() ######
UnboundLocalError: local variable 'x' referenced before assignment //报错
  • global 声明一个全局变量

  • 使用global 在函数中操作全局变量

x = 100

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

def fun():
global x
x = x + 1
print(x)
global y
y = x + 100
fun()
print(x)
print(y)
########
101
101
201

函数的返回值

  • 函数被调用后会返回一个指定的值

  • 函数调用后默认返回None

  • return 返回值

  • 返回值可以是任意类型

  • return 执行后,函数终止

  • return 和 print的区别

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

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

函数的递归

  • 在函数中调用本身

例:计算阶乘

正常方法


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

使用递归

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

python 复习 4-1 函数、参数、返回值、递归的更多相关文章

  1. Python基本语法_函数_返回值

    目录 目录 前言 函数的返回值 在函数中Return和Print的区别 函数中的文档 前言 函数的返回值是函数重要的组成部分.函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返 ...

  2. Swift 定义函数 参数 返回值

    定义多参数函数 - 用func声明函数  func name(parameters) -> return type { function body } func halfOpenRangeLen ...

  3. python函数基础-参数-返回值-注释-01

    什么是函数 函数就是有特定功能的工具 # python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分 为什么要用函数 # 可以减少代码冗余,增加代码复用性 # 使代 ...

  4. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数

    Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...

  5. python -- 初始函数 函数的定义,函数的返回值以及函数的参数

    1.什么是函数,函数的定义及语法 2.函数的返回值 3.函数的参数 一.函数的定义及语法 函数的定义:定义了一个动作或者功能,是对功能的封装 语法: def 函数名( 形参列表 ):          ...

  6. Python的函数式编程-传入函数、排序算法、函数作为返回值、匿名函数、偏函数、装饰器

    函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

  7. python中函数的返回值

    函数返回值(一) <1>“返回值”介绍 现实生活中的场景: 我给儿子10块钱,让他给我买包烟.这个例子中,10块钱是我给儿子的,就相当于调用函数时传递到参数,让儿子买烟这个事情最终的目标是 ...

  8. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  9. c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别

    一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...

  10. javascript . 03 函数定义、函数参数(形参、实参)、函数的返回值、冒泡函数、函数的加载、局部变量与全局变量、隐式全局变量、JS预解析、是否是质数、斐波那契数列

    1.1 知识点 函数:就是可以重复执行的代码块 2.  组成:参数,功能,返回值 为什么要用函数,因为一部分代码使用次数会很多,所以封装起来, 需要的时候调用 函数不调用,自己不会执行 同名函数会覆盖 ...

随机推荐

  1. LeetCode 389——找不同

    1. 题目 2. 解答 2.1. 方法一 将 s 和 t 转化为 Python 的列表,然后遍历列表 s 的元素,将它们从列表 t 中删除,最后列表 t 中会余下一个元素,即为所求. class So ...

  2. nodeJs 调试异步程序追踪异步报错

    DeprecationWarning: Calling an asynchronous function without callback is deprecated. 翻译: 不建议在不回调的情况下 ...

  3. 预研报告——MyBatis持久层的demo

    一.预研任务介绍和预研目标 任务介绍: 与 Hibernate 相比, MyBatis 是一个半自动化的持久层框架,以轻量级.效率高.原生代而好评如潮.虽然有在分享会上大致讲解,但是还是重新梳理成文字 ...

  4. beta版本冲刺四

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组 ...

  5. libevent显式调用事件处理

    ) { SearchAcceptListen2(p_ev_arg->listen_fd,,&notify_event,base); event_base_loop(base, EVLOO ...

  6. 【bzoj5060】魔方国 乱搞+特判

    题目描述 一张未知的有重边无自环的图,只知道点数为n,边数为m.可以标记若干个点,如果一个点被标记,那么与它距离不超过k的点(包括本身)都会被覆盖. 显然对于每张不同图,让所有点被覆盖的最小代价是不一 ...

  7. java 使用ByteArrayOutputStream和ByteArrayInputStream实现深拷贝

    首先介绍Java中的浅拷贝(浅克隆)和深拷贝(深克隆)的基本概念: 浅拷贝: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.浅复制仅仅复制所考虑的对象,而 ...

  8. CSS优化压缩

    顾名思义缩写有简写意思,那就总结一下CSS缩写知识点.为什么要让CSS属性缩写?1.简化代码.一些CSS属性简写可以减少CSS代码从而减少CSS文件的占用字节.加快网页下载速度和网页加载速度.2.优化 ...

  9. Netscaler立身之本—NAT

    Netscaler立身之本—NAT http://blog.51cto.com/caojin/1926579 一.前言 ADC的主要作用是作为服务器的反向代理来进行应用发布的,介于客户端和服务器端之间 ...

  10. 十个迅速提升JQuery性能的技巧

    本文提供即刻提升你的脚本性能的十个步骤.不用担心,这并不是什么高深的技巧.人人皆可运用!这些技巧包括: 使用最新版本 合并.最小化脚本 用for替代each 用ID替代class选择器 给选择器指定前 ...