2017-10-29-06函数基础笔记

函数

​ 函数是重用的程序段。

​ 自定义函数

def  函数名(参数列表):
	函数体

​ 匿名函数 使用 lambda 来创建匿名函数

lambda [arg1,[arg2,...]]:expression

​ 函数的参数

形参:函数括号内的参数
实参:调用函数的时候传递给形参的值

​ 默认参数

#调用函数时,如果没有传递参数,则会使用默认参数。
#给形参指定默认参数,形参=默认值
#例子
def say(message,times = 1):
	print(message * times)
	
say('hello')
say('word',5)

#输出
#hello
#wordwordwordwordword

​ 关键字参数

如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值——这被称作关键参数。

'''
两个优势:1不必担心参数的顺序
2假设其他参数都有默认值,可以给参数赋值来改变默认参数
'''
#例子
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

​ 不定长参数 VarArgs参数

'''
定义一个能获取任意个数参数的函数,可以通过*号来实现
'''
#例子

def total(initial=5,*numbers,**keywords):
	count=initial
	for number in numbers:
		count+=number
	for key in keywords:
		count+=keywords[key]
	return count
	
print(total(10,1,2,3,vegetables=50,fruits=100))

#输出
#166
'''
如何工作:
	当我们定义一个带星的参数,像*param时,从那一点后所有的参数被收集为一个叫'param'的列表。(
	在该例中,首先会给initial的值由5变成10,然后numbers将1,2,3,收集作为一个元组numbers=(1,2,3))
	
	类似地,当我们定义一个带两个星的参数,像**param时,从那一点开始的所有的关键字参数会被收集为一个
叫做'param'的字典。(在该例中,从vegetables=50后的所有参数收集作为一个字典		keywors='vegetables':50,'fruits:100')

'''

Keyword-only参数

​ 如果想指定特定的关键参数为keyword-only而不是位置参数,可以在带星的参数后申明:

def total(initial=5,*numbers,vegetbales):
	count=initial
	for number in numbers:
		count+=number
	count+=vegetbales
	return count

print(total(10,1,2,3,vegetables=50))
print(total(10,1,2,3,))
#Raise error because we have not supplied a default argument value for 'vegetables'

#输出
#66
#print(total(10,1,2,3))
#TypeError: total() needs keyword-only argument vegetables

'''
	如何工作:
	在带星的参数后面申明参数会导致keyword-only参数。如果这些参数没有默认值,并且像上面那样不给关键参数赋值,调用函数的时候就会报错。
	如果你想使用keyword-only参数,但又不需要带星的参数,可以简单地使用不是用名字的空星,如def total(initial=5,*,vegetables)
'''

​ return语句

return 语句用来从一个函数返回即跳出函数。也可以自定义return 返回值。默认 return None

​ DocStrings文档字符串

def printMax(x,y):
	'''Print the maximum of two numbers.
	
	The two values must be integers.'''
	x=int(x)
	y=int(y)
	
	if x > y:
    	print(x,'is maximum')
    else:
    	print(y,'is maximum')
    	
    printMax(3,5)
    print(printMax.__doc__)
    
 #输出
 #5 is maximum
 #Print the maximum of two numbers.
 #
 #	The two values must be integers.
 
 '''
 	如何工作:
 	在函数的第一个逻辑行的字符串是这个函数的文档字符串。注意,DocStrings也适用于模块、类。
 	文档字符串惯例是一个多行字符串。首行一大写字母开始,以句号结束。第二行是空行,第三行才是详细的描述。
 	
 	在上面的例子中,可以使用__doc__(注意是双下划线)调用函数的文档字符串属性。在python中函数也可以看做是对象,print(函数的__doc__属性)。
 '''

	

变量作用域

​ 变量在哪个域命名的决定那个域可以访问该变量。

'''
python作用与一共有4中:
L(Local)局部作用域
E(Enclosing)闭包函数外的函数中
G(Global)全局作用域
B(Built-in)内建作用域
以L->E->G->B的规则查找
'''
x = int(2.9)
g_count = 0	#全局作用域
def outer():
	o_count = 1	#闭包函数外的函数中
	def inner():
		i_count = 2	#局部作用域

'''
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说if/for/while/try这里不会使
用global、nonlocal关键字
'''

猜你喜欢

转载自blog.csdn.net/github_38970218/article/details/88543647