文档章节

Python3中的函数

枫叶云
 枫叶云
发布于 04/15 22:58
字数 1987
阅读 356
收藏 9
点赞 1
评论 0

Python 函数

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

函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但也可以自己创建函数,这被叫做用户自定义函数。

1.函数的定义:

你可以定义一个由自己想要功能的函数,以下是简单的规则:

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

语法

def functionname( parameters ):
   function_suite
   return [expression]

默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。

举例1:

def add(x, y):
print(“x = {0}”.format(x))
print(“x = {0}”.format(x))
print(“x  + y  = {0}”.format(x+y))
return x+y

 举例2:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/14 20:31
# @Author  : Feng Xiaoqing
# @File    : demo1.py
# @Function: -----------


def f(x,l=[]):
    for i in range(x):
        l.append(i*i)
    print(l)

# f(2) = f(2, l=[])

f(2)
# 结果:[0, 1]

f(3,[3,2,1])
# 结果: [3, 2, 1, 0, 1, 4]

f(x=3, l=[])
# 结果: [0, 1, 4]

运行结果:

[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 4]

 

2.函数的调用

定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。

如下实例调用了add()函数:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/15 21:01
# @Author  : Feng Xiaoqing
# @File    : demo2.py
# @Function: -----------

# 自定义加法函数add()
def add(x,y):
    print("{0} + {1} = {2}".format(x,y,x+y))
    return
    print("finished")   #在return后不会执行这条语句


# 调用函数,计算2+3的得数
add(2,3)

运行结果:

2 + 3 = 5

 

3.函数的参数

形式参数和实际参数

    在定义函数时,函数名后面,括号中的变量名称叫做形式参数,或者称为"形参"

    在调用函数时,函数名后面,括号中的变量名称叫做实际参数,或者称为"实参"

       

 def fun(x,y):  //形参

    print(x + y)

    fun(1,2)     //实参

    3

    fun('a','b')

    ab

函数默认参数:

    缺省参数(默认参数)

def fun(x,y=100)    

  print x,y


#调用:

fun(1,2)

fun(1)

    定义:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def fun(x=2,y=3):

  print x+y

    

    调用:

fun()
#结果:
5


fun(23)
#结果
26


fun(11,22)
#结果:
33

 

我们经常在看别人的代码中,经常出现def(*args, **kwargs)这样的表现形式:

*args             指的是:tuple  (1, )
**kwargs       指的是:dict   {“k”: “v”}

fun(*args, **keargs)
fun(1, 2, 3, 4, 5, a=10, b=40)

 

4.函数的返回值

函数返回值:

函数被调用后会返回一个指定的值

函数调用后默认返回None

return返回值

返回值可以是任意类型

return执行后,函数终止

return与print区别

#!/usr/bin/env python
# -*- coding:utf-8 -*-
def fun():

  print 'hello world'

  return 'ok'

  print 123


fun()

#结果

hello world

123

None

 

5.函数的变量

局部变量和全局变量:

Python中的任何变量都有特定的作用域

在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量

在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量。

def fun():

   x=100

   print x

fun()

x = 100

    

def fun():

   global x   //声明

   x +=1

   print x

fun()

print x

   

 

外部变量被改(x由100改为101):

x = 100

def fun():

  global x

  x += 1

  print (x)

fun()

print (x)


#结果
101
101

 

内部变量外部也可用:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/15 21:33
# @Author  : Feng Xiaoqing
# @File    : demo2.py
# @Function: -----------

x = 100

def fun():

    global x

    x +=1

    global y

    y = 1

    print(x)

fun()

print(x)

print(y)


#结果:
101
101
1

   

统计程序中的变量,返回的是个字典

#!/usr/bin/env python
# -*- coding:utf-8 -*-

x = 100
def fun():
    x = 1
    y = 1
    print(locals())

fun()
print (locals())

  结果:

{'y': 1, 'x': 1}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x02FF6390>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/PycharmProjects/PythonLive/untitled/day07/demo2.py', '__cached__': None, 'x': 100, 'fun': <function fun at 0x052D2390>}

 

6.匿名函数

顾名思义就是没有名字的函数,那为什么要设立匿名函数,他有什么作用呢?
lambda 函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方

python 使用 lambda 来创建匿名函数。

  • lambda只是一个表达式,函数体比def简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

语法

lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

 举例:

求两数的乘积:

常规写法:

def fun(x,y)
  return x*y

lambda版本写法:

r = lambda x,y:x*y


7.高阶函数

(1)map(f, list)

返回每个元素通过f计算完的value的list

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

举例:计算列表里值的平方

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def f(x):
    return x*x

for i in map(f,[1,2,3,4,5,6,7]):
    print(i)

结果:

1
4
9
16
25
36
49

 

(2)reduce(f,list)函数(求list中数的和)

reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

举例:计算列表中所有数的和

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from functools import reduce  #导入reduce函数

def f(x,y):
    return x+y
print(reduce(f,[1,2,3,4,5,6,7,8,9,10]))
print(reduce(f,range(1,101)))


#结果:
55
5050

 

(3)filter()函数(过滤)

filter函数接收一个函数f和一个list,函数f的作用是对每个元素进行判断,返回True或者False,filter()根据判断结果自动过滤掉不符合条件的元素,返回符合要求的元素组成的list

filter(lamdba x: x%2 ==1, [1, 2, 3, 4, 5])

举例:计算list中小于7的数

#!/usr/bin/env python
# -*- coding:utf-8 -*-

for i in filter(lambda x:x<7, [1, 2, 3, 4, 5,40,8]):
    print(i)


#结果:
1
2
3
4
5

 

(4)sorted()函数(排序)

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

# sorted(iterable, key, reverse)
# iterable  一个可迭代的对象
# key 对什么进行排序
# reverse  bool类型,如果为true为反序, 默认为false
# 返回值是一个list

举例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/15 22:47
# @Author  : Feng Xiaoqing
# @File    : demo3.py
# @Function: -----------


m = dict(a=1, c=10, b=20, d=15)
print(sorted(m.items(), key = lambda d:d[1],reverse = True)) #按value值倒序排列


#结果:
[('b', 20), ('d', 15), ('c', 10), ('a', 1)]

 

© 著作权归作者所有

共有 人打赏支持
枫叶云
粉丝 12
博文 19
码字总数 30605
作品 0
东城
python2.x和python3.x的区别

Python的3.0版本,常被称为Python3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python3.0在设计的时候没有考虑向下相容。许多针对早期Python版本...

leejia1989
06/26
0
0
Python2.x与3.x版本区别

Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。 许多针对早期Python版...

Airship
2015/11/12
0
0
python 与 matlab 混编

用于 Python 的 MATLAB 引擎 API 快速入门 安装用于 Python 的 MATLAB 引擎 API Matlab的官方文档中介绍了 Matlab 与其余编程语言之间的引擎接口,其中包括对于 Python 开放的引擎 API,可参...

xinet
06/11
0
0
Supporting Python 3——不使用2to3转换支持Python 2和Python 3

不使用2to3转换支持Python 2和Python 3 虽然Python 3的官方文档努阴人们写同时支持Python 2和Python 3的代码,但是在一此情况这是合适的。尤其是你不能放弃支持Python 2.5及更早的版本时,因...

在湖闻樟
2015/10/28
0
0
Python函数声明以及与其他编程语言数据类型的比较

1、函数声明 与其它大多数语言一样 Python 有函数,但是它没有像 C++ 一样的独立的头文件;或者像 Pascal 一样的分离的 interface / implementation 段。在需要函数时,像下面这样声明即可:...

光明辉煌
04/21
0
0
Python3: fp-growth算法代码(提供py文件,可直接调用)

一、写在前面 fp-growth算法是一个生成频繁项集的算法,其主要利用了FP树的数据结构,整个生成过程只需要遍历数据集2次。 本fp-growth代码是基于开源代码fp-growth的实现(github代码:https...

quiet_girl
05/13
0
0
Supporting Python 3——迁移python2的c扩展到python3

迁移C扩展 Python 3有很多在C语言API上的变化,包括在API中定义类和初妈化的模块。这意味着每一个C扩展为了能在Python 3 下运行需要进行修改。一些变化很简单而另一些不简单,但是因为2to3只...

在湖闻樟
2015/04/14
0
1
在C++软件中嵌入python解释器

Python简介 Python是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语法,高效率的高层数据结构,能够简单而有效地实现面向对象编程,特别适用于快速应用程序开发,也可以用来开发...

openthings
2015/01/21
0
0
python3.x与python2.x的区别汇总

python3.x与python2.7.x都是比较流行的版本,虽然建议现在的初学者开始学习python3.x的版本,但是还有很多的工程使用的是python2.7.x版本。观看代码的时候难免会出现一些问题。 在google上搜...

oldpan
2017/10/10
0
0
Supporting Python 3(支持python3)——语言区别和暂时解决方法

语言区别和暂时解决方法 这个附录包含一个Python 2和Python 3的不同之处列表以及能不用2to3转换同时在Python 2和Python 3下运行的示例代码。 这个列表是不完整的。在这里列出的只有不包括bug...

在湖闻樟
2015/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
16分钟前
0
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
23分钟前
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
28分钟前
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
30分钟前
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
0
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
1
0
iptables规则备份和恢复、firewalld的9个zone以及操作和service的操作

保存以及备份iptalbes规则 设定了的防火墙规则要进行保存,否则系统重启后这些规则就没有了,使用命令 ”service iptables save ” 会把设定好的防火墙规则保存到文件/etc/sysconfig/iptabl...

黄昏残影
昨天
0
0
k8s image

k8s.gcr.io/kube-apiserver-amd64:v1.11.0k8s.gcr.io/kube-controller-manager-amd64:v1.11.0k8s.gcr.io/kube-scheduler-amd64:v1.11.0k8s.gcr.io/kube-proxy-amd64:v1.11.0k8s.gcr.......

分秒
昨天
0
0
数据结构--排序

这篇博客包含了数据结构中多种的排序算法: (1)简单选择:第一趟在A[0]~A[n-1]之间找到最小的,与A[0]进行交换,之后在A[1]~A[n-1]之间进行。。。第i趟在A[i-1]~A[n-1]之间找到最小的,最后...

wangxuwei
昨天
1
0
一名3年工作经验的java程序员应该具备的职业技能

一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪...

老道士
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部