机器学习-python篇学习笔记(5)函数

def定义函数

在python中用def来定义函数

定义格式与C语言相似:

但是是使用def进行定义

der function(a,b):
	expression

当函数不需要返回值时,括号里可以为空。

在命令行中调用函数可以直接调用:

def function_name():
    print('This is a function')
    a = 1 + 2
    print(a)

>>> function_name()
This is a function
3

而对于需要定义变量和返回值的函数:

def function(a,b):
    c = a + b
    print("the c is",c)
>>> function(1,2)
the c is 3
>>> function(a = 1, b = 2)
the c is 3
>>> function(b = 2,a = 1)
the c is 3

对比python和c我们可以看出python的虽然对结构要求十分严格,但是语句十分的灵活。

要注意的是,在第二种调用函数的情况下,a,b的位置顺序不影响函数的读取和运行。

函数默认参数

def
sale_car(price,color,brand,is_second_hand):
	print('price',price,
	'colour',color,
	'brand',brand;
	'is_second_hand',is_second_hand,)
sale_car(1000,'red','carmy',True)


>>> 
price 1000 colour red brand carmy is_second_hand True

即在后面的语句中定义了前面变量的的值。

在程序中,sale_car是系统中定义函数,即告诉计算机这个函数的名字叫sale_car,

而price是里面变量的名称,即告诉系统这个变量叫price,而赋的值可以在定义变量的时候直接赋予

或者正在后边间接赋予,但是在赋予时要注意定义时未定义的变量要在已经定义的变量

而且这种操作是可以在定义函数时同步进行的:

def sale_car(price ,
             color = 'red',
             brand = 'carmy',
             is_second_hand = 'True'):
    print('price',price,
          'colour',color,
          'brand',brand,
          'is_second_hand',is_second_hand,)
sale_car(1000)

>>> 
price 1000 colour red brand carmy is_second_hand True

但是如果在定义时定义全部的变量则会导致数据溢出

如下:

def sale_car(price = 1000,
             color = 'red',
             brand = 'carmy',
             is_second_hand = 'True'):
    print('price',price,
          'colour',color,
          'brand',brand,
          'is_second_hand',is_second_hand,)

>>> sale_car
<function sale_car at 0x00000000040AAE18>

同时如果在前后定义了变量的值,那么以后边调用函数时定义的变量值为准。

如下:

def sale_car(price ,
	color = 'red',
	brand = 'carmy',
	is_second_hand = 'True'):
	print('price',price,
	'colour',color,
	'brand',brand,
	'is_second_hand',is_second_hand,)
sale_car(1000,color = 'blue',brand = 'bmw',is_second_hand = 'False')

>>> 
price 1000 colour blue brand bmw is_second_hand False

最后需要注意的一点是:

在前面def已经定义好的参数中,已经定义好的参数需要在为定义的参数之后,否则运行时将会报错。

全局变量和局部变量

在python中有全局变量和局部变量之分
全局变量出现在def函数外部,并在外部定义,可以直接用print进行输出
局部变量是在def内部进行定义的变量,只有在函数内部使用print才能输出,在函数外使用print进行输出则会报错。

Leven = 666
def function():
    a = 10
    print(a)
    return(Leven + a)
print(Leven)
print(function())

>>> 
666
10
676
Leven = 666
def function():
    a = 10
    print(a)
    return(Leven + a)
print(Leven)
print(function())
print(a)

>>> 
666
10
676
Traceback (most recent call last):
  File "C:\Users\sky\Desktop\python text\python text.py", line 8, in <module>
    print(a)
NameError: name 'a' is not defined

如果想在外部输出局部变量a,则需要运用global和None将a转变为全局变量。

Leven = 666
a = None
def function():
    a = 10
    global a
    return(Leven + a)
print(Leven)
print(function())
print(a)

>>> 
666
676
10