函数是重用的程序段。它们允许你给一个语句块一个名称。然后你可以在你的程序任何地方使用这个名称任意多次的运行这个程序块。这被称为调用函数。上文的写的range函数与len函数。
定义一个函数调用它,神奇的 hello world !
函数通过def 关键字定义。def关键字后跟一个函数的 标识符 名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体。
def sayhello(): print 'hello world!' sayhello()
def --定义
这虽然定义了一个sayhello的函数。这个函数不使用任何参数,没有声明任何变量。参数对函数而言就是输入不同的值给函数就会得到相应的结果。
函数形参,顾名思义。形参就是“形”,抽象的,仿佛飘渺不定的感觉,这是我们调用函数定义的,抽象出来的 ,例如 a ,b ,之类的。 实参,听名字就很老实,那就是一定是非常之具体了,具体的数字,文字。形参有点像接口,实参就把它实例化了。这样理解接口,实例。肯定是不对的。方便我个人理解。
def printMax(a,b): if a > b: print a, "is maximum" else: print b,'is maximum'
# 第一次使用
printMax(3,4)
# 第二次使用 x=5 y=7 printMax(x,y)
定义了一个大小比较的函数,在第一次printMax 使用,直接把实参给了函数。
第二次使用的时候,使用变量调用函数,不过多了一步赋值给变量而已,printMax(x, y)
使实参x
的值赋给形参a
,实参y
的值赋给形参b
。在两次调用中,printMax函数的工作完全相同。
局部变量就更好理解了,局部的嘛,
电视剧不是常演:我不服!我为党国流过血,我要见师座 !这一看就是国名党反动派,在我社会主义核心价值观面前就没有用了。他就很局部。局限在国名党。
当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。
def func(x): print "x is" ,x x=2 print 'changed local to ', x x =50 func(x) print 'x is still',x
这个输出结果
x is 50
changed local to 2
x is still 50
在函数里 最开始输入的是50 , 函数内 重新赋值 X= 2
X 是函数的局部变量
可是最后一行打印函数外的X ,发现还是主块中的X 50.没有受函数内的影响,
def func(): global x print "x is" ,x x=2 print 'changed local x to ', x x = 50 func() print 'Value of x is',x
python的运行顺序, 先运行主模块的里的语句, 再运行函数里的语句. 一路顺着下来. 一定要明白语句运行的顺序.这样才有思路便于理解问题.
解决问题或者需求,重要的是什么? 一是明确需要 , 处理数据也是,明确规则. 按照规则来处理. 不要不明不白.这样很不恰当
读懂任何的编程语言也是,理解它的目的, 再去了解顺序.
和阅读一本书一样,
它是用来干什么的? 概览,翻阅浏览一遍. . 实际写一遍 . 优化根据自己的需求改良一遍
要想影响到函数外的变量,很简单。把它声明为全局变量就好了。如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global
语句完成这一功能。没有global
语句,是不可能为定义在函数外的变量赋值的。
输出结果
x is 50 Changed global x to 2 Value of x is 2
global
语句被用来声明x
是全局的——因此,当我们在函数内把值赋给x
的时候,这个变化也反映在我们在主块中使用x
的值的时候。
从基础慢慢学起,这个局部,全部,居然让我有点迷糊了。真是太蠢了。这不是很简单很久以前就学过的。
默认参数值应该是一个参数。更加准确的说,默认参数值应该是不可变的
def say(message ,times =1 ): print message * times say('hello') say('world',5)
名为say
的函数用来打印一个字符串任意所需的次数。如果我们不提供一个值,那么默认地,字符串将只被打印一遍。我们通过给形参times
指定默认参数值1
来实现这一功能。
注意:只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。
这是因为赋给形参的值是根据位置而赋值的。例如,def func(a, b=5)
是有效的,但是def func(a=5, b)
是 无效 的
关键参数: 这居然叫关键参数,不就是赋值嘛,给我都绕晕了。
如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值
def func(a,b=5,c=10): print 'a is', a,'and b is',b,'and c is ',c func(3,7) func(25,c=24) func(c=50,a=100)
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50
在第一次使用函数的时候, func(3, 7)
,参数a
得到值3
,参数b
得到值7
,而参数c
使用默认值10
。
在第二次使用函数func(25, c=24)
的时候,根据实参的位置变量a
得到值25
。根据命名,即关键参数,参数c
得到值24
。变量b
根据默认值,为5
。
在第三次使用func(c=50, a=100)
的时候,我们使用关键参数来完全指定参数值。注意,尽管函数定义中,a
在c
之前定义,我们仍然可以在a
之前指定参数c
的值。
return 语句