本章包含知识点
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是关键字

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里面是空的没有东西返回。
因为没有 显示语句,不会接受到信息,就不会返回信息。
返回值看需求 ,一般都会留一个返回值。

把概念搞清楚
返回值
变量作用域
实参、形参、默认参数、
多参数及冗余处理
返回值第二个例子,
返回绝对值。
 返回值,给调用者,
返回值,给调用者,
谁执行了,谁就是调用者;
函数返回值
函数被调用后会返回一个指定的值
函数调用后默认返回None
?return 返回值
?返回值可以是任意类型
? return执行后,函数终止
? 区分返回值和输出
return 执行后,函数终止案例
第一个函数为 打印操作,
指定值为a,返回的结果为 函数内语句全部执行;
第二个函数操作第二个操作为 返回 结果;
指定值为a,返回结果为 start,执行到 return函数就会终止很明显体现。
这种结构下面代码虽然是没有 意义的,但是如果在 if 不同分支下,return出不同结果,还是很有用的。
函数的返回值,是返回给调用者的。输出是虽然也是在屏幕上,但是那个是程序输出的结果。

变量的作用域例子
把概念搞清楚
?变量作用域
?实参、形参、默认参数
?多参数及冗余处理
定义函数
定义函数 和定义变量是不一样的,定义函数过后,函数里面的变量是不能被直接使用的。报错 显示 未定义名称
变量 b = 100
直接生效,返回100
定义变量 会立即生效;


虽然b定义变量 b= 100
定义函数里面 定义b = 20
但是函数并没有被调用,所以变量b = 20不会被执行的。

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

叫做 变量的作用域
在脚本当中,或者程序当中直接定义的变量都叫做 全局变量,在函数或类当中,这样的变量叫做局部变量,只在函数内部起作用,对外部是没有任何影响的。
变量作用域
如果经过操作之后,想让个值 变成 全局变量或者把外面全局变量的值进行更改,该怎么办?
这个时候就用到 下面所讲的
变量 作用域
强制声明为全局变量
?语法为global
如果你要把一个局部变量,变成全局变量也是可以的。

在函数里面先 声明 b是全局变量
查看之前的全局变量 b 此时为 100
使用 函数 后 变量 b 也为 10.全局变量生效。
把全局变量 b的 标签 指到了 b上面。
这就是全局变量和局部变量。
目前大概了解一下,函数外面的变量 和 函数里面的变量;
参数
本文开头 二倍运算的时候,我们还定义了一个东西,括号里面的数,称之为 参数,这个可以赋值,可以调用。

参数虽然分为 实参、形参、默认参数、在python当中。只需要看到括号里面的数,称之为 参数就行了。如果别人问,还是需要知道什么为实参、形参、默认参数、=。=
参数(变量)
 ?def fun(形参)
 ?fun(实参)
 ?x是默认参数)
 ?deffun (x=0)
定义函数的时候,括号里面的形参 称之为 形式参数
调用函数 传值时,实际的那个值,就是它的实参
我在定义函数的时候,给某一个值,指定了一个值,就是它的 默认参数
参数 例子
 这个叫做 形式 参数,因为你不知道 它的值是什么,只是定义了一个x。说它是个参数。
这个叫做 形式 参数,因为你不知道 它的值是什么,只是定义了一个x。说它是个参数。
 当调用这个函数的时候,需要传值了,传了一个20,这个20就是 实际参数。但我在运行这个程序的时候,会把这个这个值带入 x,x带入函数当中,里面的操作就是 函数的事情。
当调用这个函数的时候,需要传值了,传了一个20,这个20就是 实际参数。但我在运行这个程序的时候,会把这个这个值带入 x,x带入函数当中,里面的操作就是 函数的事情。
还有可能出现一种情况,f2这个值定义了一个 x,它就必须要传递一个参数,如果不传参数,
就不知道f2里面有没有参数。
那么执行的时候就会报错。

可以看到 第一个 函数带入,执行了内容,x = 2 乘2
第二个 不给参数,函数执行了 默认参数。x = 3 乘2
所以这个就叫做 默认参数

如果传递多个参数 也是不行的,
但是 有一种 情况是可以 解救的,不传参数就行了,
不传参数 ,那么就在定义参数的时候,给他一个默认参数。

通过以上案例了解,
什么 是--形式参数--实际参数---默认参数
多参数例子
参数搞清楚了,下面就是多参数,
以上执行的参数 都是只有一个参数
如果 定义复杂一点的,比如说要定义一个 饼干机器,

这就是多个参数了,运用 元祖做的。定义函数的时候可一指定多个参数,那么多个参数当中,还有一些参数,我想给他默认值,那就要设计一下 参数的顺序了。
因为通常来讲,我们传递值的时候,是从左向右给他赋值的,所以你要是给它 默认值的话 就要 从右向左,给他默认值。列入下面第二个例子
多参数例子 二

注意 如果是设置 默认参数,多参数的话,一定是从右向左。
因为将来,你传递 值 5的时候,是从左往右,将来调试的时候,x = 5 ,y什么都没有的话,传进来 草莓的,会给 x ,y是什么都得不到的。
所以注意 默认参数的 设置方式,一定是 从右向左去。
或者全部设置成默认参数,直接使用默认参数。

多参数传递

如果定义好 一个 普通的列表,对函数使用看起来可以调用。
结果为失败, 原因是因为x 参数得到值后进行操作,先第一个赋值给%d,得到一个字符串,而%d要的整数,数字,到这里面就运行不下去了。
如果你想传递一个 列表或者元祖的话,只需要在前面传递一个*号,这样会把里面的列表或元祖进行一个拆分,分别赋值给函数,但是如果参数不统一的话,也是不可以的。

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

字典传值
当然除了列表,还有一直类型这种传值,那就是字典。
和列表不一样的地方 就是 在加一个 *号 就可以了。
函数名{**x}

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

这就是 传值。
当你定义,一个可以多参数的函数的时候,你可以传递列表,也可以传递字典。
也会发现 传递的过多,或者过少的话的情况,
看下面的举例,

这个时候就设计到,冗余处理,
冗余处理
当你传递的参数币,定义好的函数多的时候,就该用到 冗余处理,
冗余处理是在函数定义的时候就进修改;
如果只能接受两个值,那么就定义一个参数去接受多余的。
定义参数的信息,前面加 *号。
此为第一种,以类似字典形式存取值;

第二种方式
如果是单个参数,还是可以冗余处理的,
可如果,指定了 key和value,键值对的这种值
元祖接收不了 ,应该是一个字典。

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

通过本章,
1知道如何定义一个函数,
函数的工作过程就是,传递给它一个值,它进行处理,在返回给我们。
2定义函数过程
函数的返回值的重要性
3函数里面的变量,和全局变量的区别,如何申明为全局变量
4明白什么是 形参,实参,什么是默认参数。
5知道怎么去处理 多参数的传递,和冗余处理。关于自定义函数的基本内容
2018年1月13号 王宇林
原文:http://blog.51cto.com/xwxhvip/2060473