1、之前使用过的内建函数:
len(字符串变量)
range(a,b,c)
int(可转化成整数的字符串)
2、def
函数用关键字def定义,之后跟函数的名称,再跟圆括号,括号内可以有参数列表,再跟冒号结束。另起一行是函数体。
------------
#C:/Python33/HwhCode
#Filename: controlStream.py
def sayHello():
print('Hello World!')
sayHello()
sayHello()
---------------
输出:
-------------
####printMax#######
def printMax(a,b):
if a>b:
print(a,'is maximum.')
elif a == b:
print(a,'is equal to',b)
else:
print(b,'is maximum.')
printMax(3,4)
x=5
y=5
printMax(x,y)
--------------
输出:
3、局部变量:(非常不同)
作用于仅在函数内部,与函数外部具有相同名称的变量没有任何关系。
变量的作用于是它定义的块,从它定义那一点开始生效。
----------
#####func_local######
xx = 50
def func_local(xx):
print('xx is',xx)
xx = 2
print('Changed local xx to',xx)
func_local(xx)
print('xx is still',xx)
----------
这里要注意的是,python在函数块中对一个变量重新赋值似得使用,是在定义一个新的局部变量。
4、全局语句
如果想要对一个函数外的变量赋值,需要告诉python这个变量时全局的。(但这个并不提倡使用。因为只知道是外面的,但不知在哪里定义的。)
--------
#####func_global#####
z = 50
def func_global():
global z
print('z is',z)
z = 2
print('Changed global z to',z)
func_global()
print('Value of z is',z)
---------
可以使用global同时指定多个全局变量。如global x,y,z
5、非局部语句(44页)
非局部作用域介于局部作用域和全局作用域之间。非局部作用域在所定义的函数内定义函数时会看到。
在python中,任何代码都是可执行的,所以,在函数内可以定义函数。
------------
######func_nonlocal######
def func_outer():
x = 2
print('x is',x)
def func_inner():
nonlocal x
x =5
func_inner()
print('Changed local x to',x)
func_outer()
----------
比较:
在函数外部声明的变量,是局部变量。如果要在函数内部使用这个局部变量,需要用global关键字声明为全局变量。
在函数内部声明的变量,是局部变量。如果要在函数内部嵌套定义的函数里使用,需要用nonlocal关键字声明为非局部变量。
6、默认参数值
对于一些函数,可能会希望它的一些参数可是选的,如果不想为这些参数提供值得话,可以使用默认参数值。
只需要在函数定义的时候,参数列表中赋上默认值就可以了。
-------------
#######func_default_value##########
def say(message,times =1):
print(message*times)
say('Hello')
say('World',5)
-------------
知识点:
(1)只有在参数列表最后面的那些参数可以有默认参数值。
(2)print()语句,print(字符串*次数)
7、关键参数:
如果,某个函数有很多参数。而使用时只想指定其中的一部分,可以通过命名来为这些参数赋值-----称之为关键参数,我们使用参数名字作为关键字来给参数赋值,而不是使用位置。
优势:(1)我们不必担心参数的位置,更加方便了。(2)如果某些参数有了默认参数值,我们可以指定需要赋值的参数。
------------
#####func_key#######
def func_key(a,b=5,c=10):
print('a is',a,'and b is',b,'and c is',c)
func_key(3,7)
func_key(25,c=24)
func_key(c=50,a=100)
----------
8、VarArgs参数(全新的)
有时候,你可能想要定义一个可以获取任意个参数的函数,可以使用*来实现。
------------
######func_total#######
def func_total(initial = 5, *numbers, **keywords):
count = initial
for number in numbers:
count += number
for key in keywords:
count += keywords[key]
return count
print(func_total(10,1,2,3,vegetables=50,fruits=100))
------------
知识点:
(1)带*的参数,*param,从这一点开始所有的参数都被收集到一个叫做param的列表里边。numbers=(1,2,3)
(2)带**的参数,**param,从这一点开始,所有的关键字参数都被收集到一个叫做param的字典里。keywords='vegetables':50,'fruits':100
9、Keyword-only参数(全新的)
如果想指定特定的关键参数是keyword-only参数,而不是位置参数,可以在带*的参数后申明。
注意,keyword-only参数使用时,如果没有默认值,则一定要在调用的时候赋给默认值。否则会出错。
-----------
def total(initial=5,*numbers,vegetables):
count = initial
for number in numbers:
count += number
count += vegetables
return count
print(total(10,1,2,3,vegetables=50))
print(total(10,1,2,3,))
-----------
出错。因为vegetables没有默认值。如果赋上默认值,就不会出错了。
总结:
(1)在带*的参数后声明参数,会导致keyword-only参数。
(2)如果想要使用keyword-only参数,同时又不想使用带*的参数,可以用一个空*代替。如:def total(initial=5,*,vegetables):
10、return语句
return语句,用来从一个函数返回,即跳出函数。我们可以选择,是否从函数返回一个值。
----------------
######func_return######
def maximum(x,y):
if x>y:
return x
else:
return y
print(maximum(2,3))
-----------
注意:
(1)没有返回值的return 语句,等价于return None
(2)None是python中没有任何东西的特殊类型。如果一个变量值为None,就是它没有值。
(3)每个函数末尾,自动默认有一个return None语句,除非你自己提供一个return语句。
------------
###someFunction####
def someFunction():
pass
print(someFunction())
def someFunction1():
x=1
print(someFunction1())
-------------
每个函数末尾,自动默认有一个return None语句。pass语句表示一个空的语句块。
注意,python有内置的max函数,最好使用内置函数,而不是自己定义。
11、DocStrings文档字符串(应当经常使用)
--------
####func_doc######
def printMax(x,y):
'''Prints the maximum of two numbers.
The two values must be integers.'''
x = int(x)#convert to integers, if possible
y = int(y)
if x>y:
print(x,'is maximum')
else:
print(y,'is maximum')
printMax(3,5)
print(printMax.__doc__)
help(printMax)
---------
知识点解析:
(1)函数第一个逻辑行的字符串是这个函数的文档字符串。DocStrings也适用于文档和类。
(2)文档字符串的惯例是:首行以大写字母开始,句号结尾。第二行是空行。第三行开始是详细的描述。
(3)使用__doc__(双下划线)调用文档字符串。
(4)help()函数,由此可见help函数仅仅是抓取函数的docStrings进行输出。
12、注解
注解是一个高级特性,获取每个参数和返回值附加信息的漂亮的方式。
python语言本身不以任何方式解释这些注解。