Python学习日记(三)
啊啊啊啊,写博客真的好累啊。终于明白为什么程序员最讨厌的四件事就是:
1、写文档
2、别人不写文档
3、写注释
4、别人不写注释
本文仅用于记录,主要参考Alex老师博客:
http://www.cnblogs.com/alex3714/articles/5740985.html
小知识:
1、编程思想
编程思想有三种:
(1)面向对象编程。(只要输入是确定的,输出就是确定的。不会出现输入一个值会出现好几种情况的输出,比如if...else就是这种情况。)
(2)面向过程编程。(无返回值,在Python中返回None)
(3)函数式编程。(有返回值)
2、过程与函数的区别
过程是编制程序时定义的一个语句序列,用来完成某种指定的操作。过程说明是由过程首和分程序(说明部分和过程体)组成。
函数是子程序的另一种形式,也是编制程序时定义的一个语句序列.与过程不同的是函数不以实现某种操作为目的,而仅是为了获得一个计算结果值.这个结果值最终是通过函数名返回给调用者的。
一、函数
函数的作用:
1、可以减少重复代码。
2、使程序易于扩展。
3、使程序易于维护。
函数的语法定义:
def say_hi( ): print(“hello world”)
二、函数传参
1、位置参数
实参位置要与形参一一对应。
def count(a,b,c): s = a*b+c; print(count(1,2,3)) print(count(1,3,2)) #参数位置不同,结果不一样。
2、默认参数
设置默认参数后,假如传参的时候没有传到该参数,就使用默认参数作为实参。
def count(a,b,c=3): s = a*b+c; print(count(1,2,3)) print(count(1,2)) #尽管没有传到c的参数,但结果还是一样。
3、关键字传参
在传参的时候指定形参的值,位置可以调换。
def count(a,b,c): s = a*b+c; print(count(1,2,3)) print(count(c=3,a=1,b=2)) #位置不一样,但结果一样。
关键参数必须放在位置传参之后
4、非固定传参
有时候不知道该传多少个参数,就可以用非固定传参。
*args:
*args #可以不这么写,但为了规范还是这样写
*args #将多个参数以元组的形式传递
*args #可以接受N个位置参数(非关键字和字典)
def count(*args): c = args[0]*args[1]+args[2] return c print(count(1,2,3))
**kwargs:
**kwargs #可以不这么写,但为了规范还是这样写
**kwargs #将N个参数以字典的形式传递
**kwargs #传递N个关键字参数,将其转为字典参数
def count(**kwargs): c = kwargs["a"]*kwargs["b"]+kwargs["c"] return c print(count(a=1,b=2,c=3))
三、局部变量与全局变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时: 在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
name = "1liangxi" #全局变量 def print_name(name): name = "2liangxi" #新建一个局部变量,并非修改全局变量。 print(name) #打印局部变量 print_name(name) #调用函数 print(name) #因为在函数中只是新建了一个局部变量,并非修改全局变量,所以打印的时候不会修改 #输出: #2liangxi #1liangxi
要想在函数中修改全局变量,可以用global修改。(千万不要在函数里修改局部变量,除非迫不得已。也不要在函数中创建全局变量。)
三种数据类型不应该在函数里改:元组,字符串,数字。
name = "1liangxi" #全局变量 def print_name(): global name; #表明在该函数中可以修改全局变量 name = "2liangxi" #修改全局变量 print(name) print_name() print(name) #输出: #2liangxi #2liangxi
四、返回值
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
1、函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束。
2、如果未在函数中指定return,那这个函数的返回值为None。
3、Python中可以返回多个值,将其以元组形式返回。
def return_value(): a = "1liangxi" b = "Alex" c = "Jerry" return a,b,c print(return_value()) print("a:",return_value()[0]) print("b:",return_value()[1]) print("c:",return_value()[2]) #输出: #('1liangxi', 'Alex', 'Jerry') #a: 1liangxi #b: Alex #c: Jerry
五、递归
函数调用本身,就是递归。
递归特性:
- 必须有一个明确的结束条件
- 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
- 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
最大递归999层。
六、高阶函数
将函数作为一个参数,传给另一个函数,就是高阶函数。
def count(a,b,f): c = f(a)+f(b) return c c = count(-3,-4,abs) #abs是Python内置的一个函数,绝对值。 print(c) #输出: #7
浙公网安备 33010602011771号