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

3Python中可以返回多个值,将其以元组形式返回。

 

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

 

 

五、递归

 

函数调用本身,就是递归。

 

递归特性:  

  1. 必须有一个明确的结束条件  
  2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少  
  3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

 

最大递归999层。

 

六、高阶函数

 

将函数作为一个参数,传给另一个函数,就是高阶函数。

 

def count(a,b,f):
    c = f(a)+f(b)
    return c
c = count(-3,-4,abs) #abs是Python内置的一个函数,绝对值。
print(c)

 

#输出:

#7

 

posted @ 2017-10-23 08:47  1liangxi  阅读(137)  评论(0)    收藏  举报