【11】Python函数学习(上)
2017-11-17 00:52
309 查看
本文主要介绍python函数,也就是函数式编程的用法。
何为函数:
函数是组织好的,可重复使用的,用来实现单一,或相关功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道python提供许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
规范:
面向对象 >>>>>> 类 >>>>>>class
面向过程 >>>>>> 过程 >>>>>def
函数式编程 >>>>> 函数 >>>>>def 定义一个函数:你可以定义一个自己想要功能的函数,规则如下:
函数代码块以def关键词开头,后接函数标识符名称和圆括号。
任何传入传入参数和自变量必须放入圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串,用于存放函数说明。
函数内容以冒号起始并且缩进。
return[表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。 函数语法:def 标识符1():‘Hello world’ #添加介绍(可不加)x +=1 #代码块return x #定义返回值 实例:
def hello():
"hello world!"
print('Hello world!')
hello() #调用函数运行结果:Hello world! 函数与过程:#函数
def text1():
print('in the text1')
return 0
#过程
def text2():
print('in the text2')
x=text1()
y=text2()
print('from text1 return is %s'%x)
print('from text2 retuin is %s'%y)运行结果:in the text1in the text2from text1 return is 0from text2 retuin is None 注:函数与过程的区别(区别不大)过程是没有返回值的函数,默认为None。 函数参数及调用函数的返回值:def test1():
print('in the text1')
def test2():
print('in the text2')
return 0 #先打印,在返回return
def test3():
print('in the text3')
return 1,'hello',['a','b']
x=test1()
y=test2()
z=test3()
print(x)
print(y)
print(z)运行结果:in the text1in the text2in the text3None #没有return默认返回 None0 #返回return定义的值(1, 'hello', ['a', 'b']) #以一个元组返回 注:不写return,默认返回None
return=1 返回object
return>1 返回一个tuple元组为什么要有返回值:需要整个函数的执行结果。 有参数的函数
def text1(x,y): #有参数的函数
print(x,y)
return 0
text1()这样会报错,没有定义参数TypeError: text1() missing 2 required positional arguments: 'x' and 'y' def text1(x,y): #行参 :根据实参变化而变化,没有实际的参数。
print(x,y)
return 0
text1(1,2) #实参 :实际参数
实参跟形参必须一一对应,个数不能超。 def text1(x,y): #行参
print(x,y)
return 0
text1(1,2) #这里叫 位置调用
text1(x=3,y=4) #关键字调用
x=5
y=10
text1(x=x,y=y) #这里面的x=x,前后两个x虽然长得一样,但是意义不一样。x=x,第一个x表示形参里面的x,第二才是定义的x变量值运行结果:1 23 45 10 关键字调用与位置调用def text2(x,y,z): #行参
print(x,y,z)
text2(1,2,3) #位置调用
text2(y=11,z=22,x=33) #关键字调用
text2(90,40,z=50)
text2(x=10,20,30) #运行报错
text2(10,x=10,) #运行报错结论:参数调用可以分为位置调用和关键字调用
位置调用,一一对应
关键字调用可以不按顺序填写
根据报错得结论,必须位置参数放在关键字前面,程序才不会出错。 函数的非固定参数默认参数:
def test(x,y=2): #这里y设定默认参数
print(x)
print(y)
test(11,22) #定义位置参数运行结果:1122def test(x,y=2): #这里y设定默认参数
print(x)
print(y)
test(11) #定义位置参数运行结果:112 结论:调用函数的时候,默认参数非必传。 以上所讲的参数调用都有一个共同点,那就是调用参数的个数,多了或者少了,都会报错(某些情况下,少参数不会报错,多了一定会报错)。如果我有N个实参,你不肯能写N个形参,针对实参不固定的情况下,有了参数组这个功能出现。具体看下面介绍 参数组:def test1(*args): 以星开头,定义变量名。这里星的作用表示,接收N个实参。规范就是*args
print(args) 以元组的形式打印出来
test1(1,2,3,4,5,6)
test1(*[1,2,3,4,5,6]) #args=tuple([1,2,3,4,5,6])
def test2(x,*args):
print(x,args)
test2(10,1,2,3,4,4,5,6)运行结果:(1, 2, 3, 4, 5, 6)(1, 2, 3, 4, 5, 6)10 (1, 2, 3, 4, 4, 5, 6)应用:预留参数 参数组(建字典)def text(**kwargs): #把N个关键字参数转换成字典的形式
print(kwargs)
text(name='alex',age=18)运行结果:{'name': 'alex', 'age': 18} def text(**kwargs): #把N个关键字参数转换成字典的形式
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
text(name='alex',age=18)
text(**{'name':'alex','age':'18'})运行结果:{'name': 'alex', 'age': 18}alex18{'name': 'alex', 'age': '18'}alex18 def text(name,age=18,*args,**kwargs): #把N个关键字参数转换成字典的形式
print(name)
print(age)
print(args)
print(kwargs)
text('alex',names='alex',wante='30')运行结果:alex18(){'names': 'alex', 'wante': '30'} 总结:*args属于位置参数,接收将N个位置参数,转换成元组**kwargs属于关键字参数,接收将N个关键字,转换成字典位置参数调用,只能在关键字参数调用前面,否则会报错。
附件:http://down.51cto.com/data/2368748
何为函数:
函数是组织好的,可重复使用的,用来实现单一,或相关功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道python提供许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
规范:
面向对象 >>>>>> 类 >>>>>>class
面向过程 >>>>>> 过程 >>>>>def
函数式编程 >>>>> 函数 >>>>>def 定义一个函数:你可以定义一个自己想要功能的函数,规则如下:
函数代码块以def关键词开头,后接函数标识符名称和圆括号。
任何传入传入参数和自变量必须放入圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串,用于存放函数说明。
函数内容以冒号起始并且缩进。
return[表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。 函数语法:def 标识符1():‘Hello world’ #添加介绍(可不加)x +=1 #代码块return x #定义返回值 实例:
def hello():
"hello world!"
print('Hello world!')
hello() #调用函数运行结果:Hello world! 函数与过程:#函数
def text1():
print('in the text1')
return 0
#过程
def text2():
print('in the text2')
x=text1()
y=text2()
print('from text1 return is %s'%x)
print('from text2 retuin is %s'%y)运行结果:in the text1in the text2from text1 return is 0from text2 retuin is None 注:函数与过程的区别(区别不大)过程是没有返回值的函数,默认为None。 函数参数及调用函数的返回值:def test1():
print('in the text1')
def test2():
print('in the text2')
return 0 #先打印,在返回return
def test3():
print('in the text3')
return 1,'hello',['a','b']
x=test1()
y=test2()
z=test3()
print(x)
print(y)
print(z)运行结果:in the text1in the text2in the text3None #没有return默认返回 None0 #返回return定义的值(1, 'hello', ['a', 'b']) #以一个元组返回 注:不写return,默认返回None
return=1 返回object
return>1 返回一个tuple元组为什么要有返回值:需要整个函数的执行结果。 有参数的函数
def text1(x,y): #有参数的函数
print(x,y)
return 0
text1()这样会报错,没有定义参数TypeError: text1() missing 2 required positional arguments: 'x' and 'y' def text1(x,y): #行参 :根据实参变化而变化,没有实际的参数。
print(x,y)
return 0
text1(1,2) #实参 :实际参数
实参跟形参必须一一对应,个数不能超。 def text1(x,y): #行参
print(x,y)
return 0
text1(1,2) #这里叫 位置调用
text1(x=3,y=4) #关键字调用
x=5
y=10
text1(x=x,y=y) #这里面的x=x,前后两个x虽然长得一样,但是意义不一样。x=x,第一个x表示形参里面的x,第二才是定义的x变量值运行结果:1 23 45 10 关键字调用与位置调用def text2(x,y,z): #行参
print(x,y,z)
text2(1,2,3) #位置调用
text2(y=11,z=22,x=33) #关键字调用
text2(90,40,z=50)
text2(x=10,20,30) #运行报错
text2(10,x=10,) #运行报错结论:参数调用可以分为位置调用和关键字调用
位置调用,一一对应
关键字调用可以不按顺序填写
根据报错得结论,必须位置参数放在关键字前面,程序才不会出错。 函数的非固定参数默认参数:
def test(x,y=2): #这里y设定默认参数
print(x)
print(y)
test(11,22) #定义位置参数运行结果:1122def test(x,y=2): #这里y设定默认参数
print(x)
print(y)
test(11) #定义位置参数运行结果:112 结论:调用函数的时候,默认参数非必传。 以上所讲的参数调用都有一个共同点,那就是调用参数的个数,多了或者少了,都会报错(某些情况下,少参数不会报错,多了一定会报错)。如果我有N个实参,你不肯能写N个形参,针对实参不固定的情况下,有了参数组这个功能出现。具体看下面介绍 参数组:def test1(*args): 以星开头,定义变量名。这里星的作用表示,接收N个实参。规范就是*args
print(args) 以元组的形式打印出来
test1(1,2,3,4,5,6)
test1(*[1,2,3,4,5,6]) #args=tuple([1,2,3,4,5,6])
def test2(x,*args):
print(x,args)
test2(10,1,2,3,4,4,5,6)运行结果:(1, 2, 3, 4, 5, 6)(1, 2, 3, 4, 5, 6)10 (1, 2, 3, 4, 4, 5, 6)应用:预留参数 参数组(建字典)def text(**kwargs): #把N个关键字参数转换成字典的形式
print(kwargs)
text(name='alex',age=18)运行结果:{'name': 'alex', 'age': 18} def text(**kwargs): #把N个关键字参数转换成字典的形式
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
text(name='alex',age=18)
text(**{'name':'alex','age':'18'})运行结果:{'name': 'alex', 'age': 18}alex18{'name': 'alex', 'age': '18'}alex18 def text(name,age=18,*args,**kwargs): #把N个关键字参数转换成字典的形式
print(name)
print(age)
print(args)
print(kwargs)
text('alex',names='alex',wante='30')运行结果:alex18(){'names': 'alex', 'wante': '30'} 总结:*args属于位置参数,接收将N个位置参数,转换成元组**kwargs属于关键字参数,接收将N个关键字,转换成字典位置参数调用,只能在关键字参数调用前面,否则会报错。
附件:http://down.51cto.com/data/2368748
相关文章推荐
- python学习笔记11(函数二): 参数的传递、变量的作用域
- Python学习笔记11—函数
- Python学习笔记11:Python函数和函数式编程
- Python中集合的内建函数和内建方法学习教程
- Python学习笔记(八)模块与函数库
- Python学习笔记-偏函数
- Python学习总结 11 使用tempest测试OpenStack
- 莫烦 python Pandas 学习笔记 2017.12.7.11
- Python学习笔记 4--字典、集合、函数(python的乐高积木一)
- python 学习笔记 ---返回值为函数 闭包
- 零基础入门学习Python(18)--函数:灵活即强大
- Python学习 之 函数
- python学习——函数
- Python学习笔记(七)函数的使用
- 初学Python的学习笔记7----偏函数、模块、重点是面向对象
- 【Python学习笔记】函数参数
- Python学习之高级函数详解
- python学习--函数使用
- python语法学习之函数,类,模块
- python学习(二)函数