python 复习 4-1 函数、参数、返回值、递归

函数

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

函数的定义:

  • 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)
时间: 2024-10-16 08:42:24

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

Python学习笔记之函数作为返回值、闭包的解释

函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数! def lazy_sum(*args): def sum(): ax = 0 for n in args:

Python 4.函数参数 返回值与文档查看(基础篇)

本章大纲:(以后文笔格式都会在开头有个大纲) -五大参数- 普通参数 默认参数 关键字参数 收集参数 收集参数解包问题 关键字收集参数 关键字收集参数解包问题 -返回值- -文档查看- -普通参数- 普通参数又名为位置参数,没有默认值,根据具体使用位置进行传值 普通参数和默认参数的不同 普通参数就是如同名字一般普通,没有默认值 而默认参数则可以规定默认值(也就是规定了默认值的普通参数而已) 但是默认参数要牢记一点:默认参数必须指向不变的对象值 请看下面例子 def add_end(L=[]):

python获得线程调用函数的返回值

threading.Thread 并没有显式的提供获取线程调用函数返回值的方法,需求自己实现. 使用数据库是一个办法: 可以让子线程将数据写到数据库中,消费线程再去数据库中读取数据: 如果不想用数据库,可以使用类的全局变量来做传递, 示例代码如下: import os import threading class SubThread(): data = {} def __init__(self): ... def execute_func(self, key): # 执行各种操作 ... ret

Swift 定义函数 参数 返回值

定义多参数函数 - 用func声明函数  func 函数名 (参数名1: 参数类型, 参数名2: 参数类型) ->  返回类型{ 函数体 } func halfOpenRangeLength(start: Int, end: Int) -> Int { return end - start } let value = halfOpenRangeLength(1, end: 9) print(value)

frida so Hook 函数参数返回值修改

![](https://s1.51cto.com/images/blog/201905/21/e59d78e7f1f9e60f376fd81c75cbd12f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) # -*- coding: UTF-8 -*- import frid

Python全栈__函数的初识、函数的返回值、函数的参数

1.函数的初识 def关键字 空格 函数名(与变量名命名规则相同):英文冒号 函数体 执行函数:函数名+() 函数是以功能为导向的. def login(): pass def register(): pass 1 def my_len(): 2 l1 = [1, 2, 3, 1, 6, 9, 10] 3 count = 0 4 for i in l1: 5 count += 1 6 my_len() 2.函数的返回值 return: 1.函数中遇到 return 结束函数,下面代码不执行. d

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

函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. 传入函数 函数的本身也可以作为参数. Python内建的mapreduce的函数.(来源于谷歌的,后来被道格这家伙开源了,成为当今处理大数据最火热的hadoop中的计算模型---MapReduce) 我们先看map.map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序

函数:语法 定义 参数 返回值

函数 我们可以先去定义?个事情或者功能. 等到需要的时候直接去用就好了. 那么这里定义的东?就是一个函数. 函数是对功能或者动作的封装函数: 对代码块和功能的封装和定义 函数的语法和定义 def 函数名(): 函数体 调用: 函数名() 函数的调?: 使用函数名可以调用函数, 写法: 函数名(), 这个时候函数的函数体会被执? 函数的返回执行完函数之后. 我们可以使用return来返回结果 return : 返回 1. 当程序没写过return, 不返回任何结果. 如果你非要接收. 接受到的是N

自定义函数中的参数返回值 “-&gt; (Int -&gt; Int)”的问题

func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { return 1 + number } return addOne } var increment = makeIncrementer() println(increment(7)) 这里为什么要写两个 Int->Int 这里是返回值是参数,左边是参数,右边是返回值的意思. 自定义函数中的参数返回值 "-> (Int

初识函数、函数的参数、函数的参数传值、函数的调用形式、函数的返回值

初识函数 内置函数自定义函数 定义无参函数 #只打印执行语句的时候def foo(): print('from the foo')# print(foo.__doc__) #查看函数的文档注释 定义有参函数 #依赖外部传来的值的时候def bar(x,y): print(x) print(y) 定义空函数 #程序开发阶段经常使用,写程序框架的时候def auth(): pass 函数的参数 函数的参数介绍形参和实参的概念 def foo(x,y): #在函数定义阶段,括号内定义的参数->形式参数