本章包含知识点

1、定义函数;

2、变量和全局变量区别;

3、形参,实参,默认参数;

4、多参传递,荣誉处理;

运行环境 ipython ,交互功能比python清晰,明了。

函数介绍

函数是编程语言当中非常重要的组成部分

会写到 三个部分

自定义函数、

函数中定义传递参数、

变量的作用域

 

一个脚本当中 一个功能要反复的出现,一般会使用函数。  功能更多 会定义个类。

只会定义数据类型还是不够的。

有的时候 会执行一堆动作,就要用到函数。

 

从数学函数过渡到Python 函数


数学函数
f(x >3*x
提供X值,函数进行3倍运算,并返回对应值
F (x,y) x*y
可以有多个参数,作为输入
返回复合对象,作为输出

数学函数 定义方法

数学函数当中给它一个值,返回一个结果。

涉嫌到 定义 函数  接收参数,在函数当中进行*2倍的运算,然后返还,这种参数可以有多个,作为数据的输入。输入到函数里面去,函数拿到数据后,处理完了,作为输出,这就是一个基本函数运行的过程。

 

python函数和数学函数 相差不大

python函数

执行单独的操作

采用零个或者多个参数作为输入

经过处理, 得到返回值(单个或复合对象) 作为输出

 

python 函数使用第一个案例。

1. 定义一个函数,名字为a3,需要得到一个值为x

2. 返回并且进行运算x*2

调用方法

用名字a3, 传递一个值为10。这个值就传递了给了x,x拿到函数里面去,进行*2,return返回值。

这就是一个输入、操作、返回的过程。

 

用 python写一个自定义函数

解释器环境为 ipython  内含交互

def是关键字

blob.png

def知识,在python中 def即使对象,也是函数。

因为def定义了一个模块变量,或者说是类的变量,它本身是一个函数对象,属于对象的函数就是对象的属性,当然,你也可以叫他"方法"。

python 的函数和其他语言的函数有很大区别。它是可以被其他变量覆盖的

叫做函数或者方法都可以。

看你的习惯,因为python里一切皆为对象,所以叫方法总是没错的,同时python也不反对面向过程的编程,于是叫函数也没错.
一般情况,我把类中def的叫作方法,把py脚本中缩进为零的def叫做函数.

参考百度百科回答 python里def:是叫函数还是方法?


  

函数



 定义: 函数就是完成特定功能的一个语句组,这组语句可以作为一个单位
使用,并且给它取一个名字。
 调用: 可以通过函数名在程序的不同地方多次执行(这通常叫做函数调
用),却不需要在所有地方都重复编写这些语句。
自定义函数
 用户自己编写的
 预定义的Python函数
系统自带的一些函数,可以直接使用

 

为什么使用函数


降低编程的难度
复杂的大问题分解成一系列更简单的小问题,小问题继续划分成更小的问题,当
问题细化为足够简单时,我们就可以分而治之。这时,我们可以使用函数来处理
特定的问题,各个小问题解决了,大问题也就迎刃而解了。
代码重用
我们定义的函数可以在一个程序的多个位置使用,也可以用于多个程序。此外,
我们还可以把函数放到一个模块中供其他程序员使用,同时,我们也可以使用其
他程序员定义的函数。这就避免了重复劳动,提供了工作效率。

 

定义和调用
def
 functionN ame (parameter1,parameter2) :

"" "注释” " "  函数是做什么用的
statement1
statement2
rerurn
 valueToReturn

不 return 就会只是一个空值。

functionName (x,y )

 

定义名字是有规定的,

如果只有一个单词 全小写,

如果有两个以上后面单词第一个字母要大写。

后面可以有参数,可以没有。

 

函数返回值改成 print ,没有返回值,返回的会是空值,

函数功能变了,变成打印数据。

调用它的话,就变成打印数据了,

虽然调用的时候,功能上感觉没什么区别,但是,注意交互 返回Out没有了,

我们可以接收到这个返回值 r = a3(10) ,发现r里面是空的没有东西返回。

因为没有 显示语句,不会接受到信息,就不会返回信息。

返回值看需求 ,一般都会留一个返回值。

blob.png

 

把概念搞清楚

返回值

变量作用域

实参、形参、默认参数、

多参数及冗余处理

 

返回值第二个例子

返回绝对值。

blob.png返回值,给调用者,

谁执行了,谁就是调用者;

 

函数返回值

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

函数调用后默认返回None

return 返回值

返回值可以是任意类型

return执行后,函数终止

区分返回值和输出

 

return 执行后,函数终止案例

第一个函数为 打印操作,

指定值为a,返回的结果为 函数内语句全部执行;

第二个函数操作第二个操作为 返回 结果;

指定值为a,返回结果为 start,执行到 return函数就会终止很明显体现。

这种结构下面代码虽然是没有 意义的,但是如果在 if 不同分支下,return出不同结果,还是很有用的。

函数的返回值,是返回给调用者的。输出是虽然也是在屏幕上,但是那个是程序输出的结果。

blob.png

 

变量的作用域例子

把概念搞清楚

变量作用域

实参、形参、默认参数

多参数及冗余处理

 

定义函数

定义函数 和定义变量是不一样的,定义函数过后,函数里面的变量是不能被直接使用的。报错 显示 未定义名称

变量 b = 100

直接生效,返回100

定义变量 会立即生效;

blob.png

 

blob.png

虽然b定义变量  b= 100

定义函数里面 定义b = 20

但是函数并没有被调用,所以变量b = 20不会被执行的。

 

blob.png

既然没有被 执行,那下面就执行一下。

执行的时候就相当于 f = 10,看了下 b的返回值,还是100;原因在于,函数在执行的时候,仅在函数当中执行,对于外面的全局变量是不受任何影响的,外面的b是多是,是没有任意关系的。

 

blob.png

叫做 变量的作用域

在脚本当中,或者程序当中直接定义的变量都叫做 全局变量,在函数或类当中,这样的变量叫做局部变量,只在函数内部起作用对外部是没有任何影响的。

 

变量作用域

如果经过操作之后,想让个值 变成 全局变量或者把外面全局变量的值进行更改,该怎么办?

这个时候就用到 下面所讲的 

变量 作用域    

强制声明为全局变量

语法为global

如果你要把一个局部变量,变成全局变量也是可以的。

blob.png

在函数里面先 声明 b是全局变量

查看之前的全局变量 b 此时为 100

使用 函数 后  变量 b 也为 10.全局变量生效。

把全局变量 b的 标签 指到了 b上面。

这就是全局变量和局部变量。

目前大概了解一下,函数外面的变量 和 函数里面的变量;

 

参数

本文开头 二倍运算的时候,我们还定义了一个东西,括号里面的数,称之为 参数,这个可以赋值,可以调用。

blob.png

参数虽然分为 实参、形参、默认参数、在python当中。只需要看到括号里面的数,称之为 参数就行了。如果别人问,还是需要知道什么为实参、形参、默认参数、=。=

参数(量)
def fun(形参)
fun()
x是默参数)
deffun (x=0)

 

定义函数的时候,括号里面的形参  称之为 形式参数

调用函数 传值时,实际的那个值,就是它的实参

我在定义函数的时候,给某一个值,指定了一个值,就是它的 默认参数

 

参数 例子

blob.png这个叫做 形式 参数,因为你不知道 它的值是什么,只是定义了一个x。说它是个参数。

 

blob.png当调用这个函数的时候,需要传值了,传了一个20,这个20就是 实际参数。但我在运行这个程序的时候,会把这个这个值带入 x,x带入函数当中,里面的操作就是 函数的事情。

 

还有可能出现一种情况,f2这个值定义了一个 x,它就必须要传递一个参数,如果不传参数,

就不知道f2里面有没有参数。

那么执行的时候就会报错。

blob.png

 

可以看到 第一个 函数带入,执行了内容,x = 2   乘2

第二个 不给参数,函数执行了 默认参数。x = 3    乘2

所以这个就叫做 默认参数

blob.png

如果传递多个参数 也是不行的,

但是 有一种 情况是可以 解救的,不传参数就行了,

不传参数 ,那么就在定义参数的时候,给他一个默认参数。

blob.png

通过以上案例了解,

什么 是--形式参数--实际参数---默认参数

 

多参数例子

参数搞清楚了,下面就是多参数,

以上执行的参数 都是只有一个参数

如果 定义复杂一点的,比如说要定义一个 饼干机器,

 

blob.png

这就是多个参数了,运用 元祖做的。定义函数的时候可一指定多个参数,那么多个参数当中,还有一些参数,我想给他默认值,那就要设计一下 参数的顺序了。

因为通常来讲,我们传递值的时候,是从左向右给他赋值的,所以你要是给它 默认值的话 就要 从右向左,给他默认值。列入下面第二个例子

多参数例子 二

blob.png

注意  如果是设置 默认参数,多参数的话,一定是从右向左。

因为将来,你传递 值 5的时候,是从左往右,将来调试的时候,x = 5 ,y什么都没有的话,传进来 草莓的,会给 x ,y是什么都得不到的。

所以注意 默认参数的 设置方式,一定是 从右向左去。

 

或者全部设置成默认参数,直接使用默认参数。

blob.png

 

多参数传递

blob.png

如果定义好 一个 普通的列表,对函数使用看起来可以调用。

结果为失败, 原因是因为x 参数得到值后进行操作,先第一个赋值给%d,得到一个字符串,而%d要的整数,数字,到这里面就运行不下去了。

 

 

如果你想传递一个 列表或者元祖的话,只需要在前面传递一个*号,这样会把里面的列表或元祖进行一个拆分,分别赋值给函数,但是如果参数不统一的话,也是不可以的。

blob.png

 

列表传值

传递多个参数进去使用函数时,前面添加*号   函数名 [*x]

blob.png

 

字典传值

当然除了列表,还有一直类型这种传值,那就是字典。

和列表不一样的地方 就是 在加一个 *号 就可以了。

函数名{**x}

blob.png

字典是取决于 字典中的 k,如果k和函数定义的不一样的,那么就不能执行。

blob.png

 

这就是 传值。

当你定义,一个可以多参数的函数的时候,你可以传递列表,也可以传递字典。

也会发现 传递的过多,或者过少的话的情况,

看下面的举例,

blob.png

这个时候就设计到,冗余处理

 

冗余处理

当你传递的参数币,定义好的函数多的时候,就该用到 冗余处理,

冗余处理是在函数定义的时候就进修改;

 

如果只能接受两个值,那么就定义一个参数去接受多余的。

定义参数的信息,前面加 *号。

此为第一种,以类似字典形式存取值;

blob.png

 

第二种方式

如果是单个参数,还是可以冗余处理的,

可如果,指定了 key和value,键值对的这种值

元祖接收不了 ,应该是一个字典。

blob.png

 

所以在函数里面再次进行修改,在加一个,传递字典是两个*号。接收 也是两个*号。

让冗余 变成字典存储里面。

blob.png

 

通过本章,

1知道如何定义一个函数,

函数的工作过程就是,传递给它一个值,它进行处理,在返回给我们。

2定义函数过程

函数的返回值的重要性

3函数里面的变量,和全局变量的区别,如何申明为全局变量

4明白什么是 形参,实参,什么是默认参数。

5知道怎么去处理 多参数的传递,和冗余处理。关于自定义函数的基本内容

 

2018年1月13号 王宇林