码迷,mamicode.com
首页 > 编程语言 > 详细

Python学习笔记——函数

时间:2016-09-07 12:39:34      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:

一、什么是函数

函数是可被调用的,可重复使用的,用来实现单一,或相关功能的代码段。

函数的作用:

  • 减少重复代码,提高应用的模块性
  • 保持代码的一致性
  • 增删改代码一次搞定,简单粗暴,更易扩展  

一、创建函数

1、定义一个函数的规则

  • 函数代码块以def关键字开头,后接函数标识符名称和()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
  • 函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明
  • 函数内容以冒号起始,并且缩进
  • return[表达式]结束函数,选择性返回一个值给调用方。如果没有return,则相当于返回None

语法:

1 def 函数名 (参数列表)
2     函数体

2、形参和实参

 形参:虚拟变量,在定义函数和函数体的时候使用形参。目的是在函数调用时接收实参,实参个数、类型要与形参一一对应。

 实参:调用函数时传给函数的参数。可以是常量、变量、表达式、函数。

形参不占用内存空间,形参变量只有在被调用时才分配内存单元。

 1 import time
 2 def action1(n):
 3     print(Start action 1.)
 4     logger(n)
 5 def action2(n):
 6     print(Start action 2.)
 7     logger(n)
 8 def action3(n):
 9     print(Start action 3.)
10     logger(n)
11 def logger(n):
12     time_format = %Y-%m-%d %X
13     time_current = time.strftime(time_format)
14     with open(日志记录,a) as f:
15         f.write("%s End action %s.\n"%(time_current,n))
16 action1(10)
17 action2(20)
18 action3(30)

 

3、函数的参数

  • 必需参数
  • 关键字参数
  • 默认参数
  • 不定长参数
  1. 无命名参数
  2. 有命名参数

 必需参数

必需参数在调用和声明时的数量及顺序必须保持一致。

关键字参数

函数调用时使用关键字参数来确定传入的参数值,按照参数名匹配参数值,使用关键在参数允许含在在调用时参数的顺序与声明时不一致。

默认参数

定义函数时,设定默认参数。当调用函数时,缺省参数如果没有值传入,则使用默认参数设定的值。

1 def print_info(name,age,sex=male):
2  
3     print(Name:%s%name)
4     print(age:%s%age)
5     print(Sex:%s%sex)
6     return
7  
8 print_info(alex,18)
9 print_info(铁锤,40,female)

不定长参数

例1:

1 def add(*args):
2     print(args:,args)
3     sum = 0
4     for i in args:
5         sum += i
6     return sum
7 print(sum:,add(1,2,3,4,5))

输出:

args: (1, 2, 3, 4, 5)
sum: 15

例2:

1 def print_info(**kwargs):
2     print(kwargs:,kwargs)
3     sum = 0
4     for i in kwargs:
5         print(%s:%s % (i, kwargs[i]))
6 
7 print_info(name=oliver,age=20,sex=female)

输出:

kwargs: {name: oliver, age: 20, sex: female}
name:oliver
age:20
sex:female
*args用元组接收传入的参数,**kwargs用字典接收传入的键值对。

4、return

return的作用:

(1)结束函数

(2)返回某个对象

注意点:

如果不加return,默认返回None。

如果return有个对象,那么会将多个对象封装成一个元组。

遇到return语句,就会停止执行并返回结果。

5、函数的作用域

 L:local,局部作用域

 E:enclosing,函数嵌套作用域

 G:global,全局作用域

 B:built_in,python内置作用域

查找顺序:L→E→G→B

global关键字:

 例:(将local作用域中的变量声明为global作用域)

1 count = 10
2 def outer():
3     global count    #打印前需先定义count的作用域
4     print(count)  #local variable ‘count‘ referenced before assignment
5     count = 100
6     print(count)
7 outer()

nonlocal关键字:

例:(将local作用域中的变量声明为enclosing作用域)

1 def outer():
2     count = 10
3     def inner():
4         nonlocal count  #先声明为enclosing作用域
5         count = 20
6         print(count)
7     inner()
8     print(count)
9 outer()

 

在局部作用域,不能修改全局作用域的变量。

在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的

 

6、高阶函数

将函数名作为实参传给另一个函数使用。

1 def f(n):
2     return n*n
3 def foo(a,b,func):
4     return func(a)+func(b)
5 print(foo(1,2,f))

输出: 5

函数不仅可以赋值,也可以作为函数的参数,还可以作为函数的返回值。

7、递归函数

 用递归函数实现打印斐波那契数列:0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

前两项分别为:0和1,从第三项开始每一项是前两项之和,因此可得:f(n) = f(n-1) + f(n-2)

1 def fibo(n):
2     if n <= 2:
3         return n - 1
4     return fibo(n-1)+fibo(n-2)
5 
6 print(fibo(8))

输出: 13

递归函数特性:

  • 调用自身函数
  • 有一个结束条件

需要注意的是,凡是能用递归解决的问题,通过循环都可以解决,并且递归的效率比较低,一般只能递归998次,超出会报错。

 

8、内置函数

 eval()

eval()函数不仅可以将字符串转换为字典,还可以作为计算机使用。

1 print(eval(1+3/8*9))

输出: 4.375

下面是几个非常重要的内置函数:

filter(function, sequence)

 

1 str = [a, b, c, d]
2 def fun1(s):
3     if s != a:
4         return s
5 ret = filter(fun1, str)
6 print(list(ret))  # ret是一个迭代器对象

输出: [‘b‘, ‘c‘, ‘d‘]

map(function, sequence)

1 str = [hello, a, b]
2 def fun2(s):
3     return s + "alvin"
4 ret = map(fun2, str)
5 print(ret)  # map object的迭代器
6 print(list(ret))

输出:

<map object at 0x7f382ca0aba8>
[helloalvin, aalvin, balvin]

reduce(function, sequence, starting_value)

1 from functools import reduce
2 def add1(x, y):
3     return x + y
4 print(reduce(add1, range(1, 101)))  ## 4950 (注:1+2+...+99)
5 
6 print(reduce(add1, range(1, 101), 20))  ## 4970 (注:1+2+...+99+20)

输出:

5050
5070

lambda

1 def add(a,b):
2     return a + b
3  
4 print add(2,3)
5  
6   
7 #匿名函数
8 add = lambda a,b : a + b
9 print add(2,3)

 

Python学习笔记——函数

标签:

原文地址:http://www.cnblogs.com/pyramid1001/p/5844861.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!