标签:open 使用 不能 bsp 参数 表示 none code 数学
1、面向对象(华山派)--->类(独门秘籍)--->class(定义的关键字)
2、面向过程(少林派)--->过程--->def
3、函数式编程(逍遥派)--->函数--->def
1、初中数学:y=2x+3
2、编程语言中的函数定义:函数是逻辑结构化和过程化的一种编程方法。
1 def test(x): 2 "The function definitions" 3 x+=1 4 return x 5 def :定义函数的关键字 6 test:函数名 7 ():内可定义形参 8 "":文档描述(非必要,但强烈建议写上) 9 x+=1:泛指代码块或程序处理逻辑 10 return:定义返回值
1 #函数 2 def func1(): 3 ‘‘‘testing1‘‘‘ 4 print(‘in the func1‘) 5 return 0 6 7 #过程(没有返回值的函数,但python中隐式的返回None,所以python中区别不大了) 8 def func2(): 9 ‘‘‘testing2‘‘‘ 10 print(‘in the func2‘) 11 12 x=func1() 13 y=func2() 14 print(x,y)
当一个函数\过程没有使用return显示的定义返回值时,python解释器会隐式的返回None,所以在python中即便是过程也可以算作函数。
函数式编程:先定义一个数学函数,然后按照这个数学模型用编程语言去实现它。
没有函数的编程只是在写一个逻辑(功能),想脱离函数,重用逻辑,唯一的方法就是拷贝。
函数的三大优点:
1、代码重用
2、保持一致性
3、可扩展性
1 import time 2 def logger(): 3 time_format=‘%Y-%m-%d %X‘ 4 time_current=time.strftime(time_format) 5 with open (‘a.txt‘,‘a+‘) as f: 6 f.write(‘%s end action\n‘%time_current) 7 8 def test1(): 9 print(‘in the test1‘) 10 logger() 11 def test2(): 12 print(‘in the test2‘) 13 logger() 14 def test3(): 15 print(‘in the test3‘) 16 logger() 17 test1() 18 test2() 19 test3()
为什么要有返回值:我想要整个函数执行的结果
返回值数=0:返回None
返回值数=1:返回object
返回值>1:返回tuple
1 ‘‘‘def test1(): 2 print(‘in the test1‘) 3 return 0 4 # print("test end") # 碰到return,终止程序运行返回0,所以不会被打印 5 x=test1() 6 print(x)‘‘‘ 7 8 def test1(): 9 print(‘in the test1‘) 10 def test2(): 11 print(‘in the test2‘) 12 return 0 13 def test3(): 14 print(‘in the test3‘) 15 return 1,‘hello‘,[‘alex‘,‘wupeiqi‘],{‘name‘:‘alex‘} 16 x=test1() 17 y=test2() 18 z=test3() 19 print(x) 20 print(y) 21 print(z) #放到一个元组里返回
test()执行,()表示调用函数test,()内可以有参数也可以没有
参数:
1、形参和和实参。形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接受实参(实参个数,类型应与实参一一对应);
实参:实际参数,调用函数时传给函数参数,可以是常量、变量、表达式、函数,传给形参。
区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参。
2、位置参数和关键字
3、默认参数。特点:调用函数时候,默认参数非必须传递
用途:1、默认安装值;2、默认端口号
4、参数组。*args,**kwargs
1 def test(x,y): 2 print(x) 3 print(y) 4 test(1,2) #与形参一一对应,位置参数调用 5 test(y=1,x=2) #与形参顺序无关,关键字调用 6 # test(3,x=1) 报错,多个值给x 7 # test(x=2,3) #报错,关键参数不能写在位置参数之前
1 def test(x,y=2): 2 print(x) 3 print(y) 4 test(1) #默认参数,不赋值就是2,赋值就为赋的值 5 6 def test(x,soft1=True,soft2=True):#默认安装值 7 pass 8 def conn(host,port=3306):#默认端口号 9 pass
1 def test(*args): #接受N个位置参数,转化成元组的形式 2 print(args) 3 test(1,2,3,4,5,6) # 参数组,实参数目不固定,形参用*定义 4 5 test(*[1,2,3,4,5,6]) # args=tuple[1,2,3,4,5,6] 6 7 def test1(x,*args): 8 print(x) 9 print(args) 10 test1(1,2,3,4,5,6,7) #与位置参数结合起来 11 12 def test2(**kwargs): # **kwrgs,接受n个关键字参数,转换成字典的方式 13 print(kwargs) 14 print(kwargs["name"]) 15 print(kwargs["age"]) 16 print(kwargs["sex"]) 17 test2(name="alex",age=8,sex=‘F‘) 18 # test2(**{"name":"alex","age":8}) 19 20 def test3(name,**kwargs): 21 print(name) 22 print(kwargs) 23 test3("alex",age=18,sex=‘m‘) 24 25 def test4(name,age=18,**kwargs): #参数组往后放 26 print(name) 27 print(age) 28 print(kwargs) 29 test4("alex",sex=‘m‘,hobby="tesla",age=3) 30 31 def test5(name,age=18,*args,**kwargs): 32 print(name) 33 print(age) 34 print(args) 35 print(kwargs) 36 test5("alex", age=34,sex=‘m‘,hobby="tesla")
1 def logger(source): 2 print("from %s" % source) 3 def test5(name,age=18,*args,**kwargs): 4 print(name) 5 print(age) 6 print(args) 7 print(kwargs) 8 logger("TEST5") 9 test5("alex", age=34,sex=‘m‘,hobby="tesla")
标签:open 使用 不能 bsp 参数 表示 none code 数学
原文地址:http://www.cnblogs.com/jyh-py-blog/p/7625648.html