Python14 函数

函数

面向对象编程: 类----class

面向过程编程:过程---def

函数式编程:函数---def

def test(x):'''描述'''x +=1return x#def是定义函数的关键字#test是函数名称#(x)是参数#x+=1是 函数体,是一段逻辑代码#return 定义返回值,返回给test函数 ,并结束函数    

1.

def func1():'''test'''print ('in the func1')return 0#函数式编程def func2():'''test2'''print ('in the func2')#定义面向过程的函数,没有return;  过程就是没有返回值的函数
x = func1()
y = func2()print ('from func1 return is %s' %x)
print ('from func2 return is %s' %y)

image_1c0ai6ka017t3ukvlhs1nfh18dk9.png-3.9kB
虽然过程函数没有return,但是python会隐式的给返回一个None,所以两者差别并不大

2.

def logger():with open('test.txt','a') as f:f.write('end action\n')def test1():print('in the test1')logger()def test2():print('in the test2')logger()def test3():print('in the test3')logger()test1()        #执行函数
test2()
test3()#可以看到三个函数都调用了logger这个函数,否则的话,我们需要在每三个函数中都要写#with open这些代码; 调用了logger函数的话,就免去写重复的代码了。

我们要在三个函数每次写入的时候都加入时间戳

import timedef logger():time_format = '%Y-%m-%d  %X'    #定义格式为年、月、日、小时分钟秒time_current = time.strftime(time_format)   #显示时间,以time_format定义的格式来显示with open('test.txt','a') as f:f.write('%s end action\n' %time_current)#修改logger函数,这样test的三个函数就全都被修改了。#时间格式%后面的字母根据大小写的不同,显示的格式也不同。

image_1c0ai9j5n1rqapjrcot58hi0m.png-11.7kB
执行后看到文档内容

定义函数的好处:
代码重用
保持一致性(修改代码不会因为认为的原因导致相同的代码写错后不一致)
可扩展性

3.

image_1c0aic33g197k1jihg4t1qhoj2413.png-8.7kB
image_1c0aic8ml1s5obmk17u0cb2c0e1g.png-0.9kB
return除了会返回值给函数,还终止函数的运行,所以后面的print没有打印。

s = test()
print (s)

image_1c0aictks1mik8ou11nk17f17ei1t.png-1.3kB
return 将0返回给了test函数,赋值变量后,这个变量就等于这个return的值。
return几乎可以返回任何类型

为什么要用return,return的作用是什么: 在编程使用函数时,可能代码会很多,然后根据不同的结return不同的值,根据不同的值可以用作下面代码的判断,然后做不同的动作; 比如根据True或False,下面的代码执行不同的操作。

image_1c0aidg4k1nufe0g1d3i2mmncp2a.png-23kB
定义三个函数,一个没有return,一个return单个元素数字,一个return多个元素
image_1c0aidpm8m501m451hfki6nj6n2n.png-4.4kB
没有return默认返回None
return单个元素,会正常返回定义的值
return多个元素,会通过元组返回(相当于一个打包,然后一起返回)

4.

image_1c0aiesfn14lmhm3a4lgbu18qd34.png-4.8kB
定义带参数的函数
image_1c0aif63u197j1c1c1q281tek7rd3h.png-12.1kB
调用函数时,如果不赋值给参数就会报错

image_1c0aigj591cnb11ma17jj1b3v1195e.png-5.1kB
赋值给参数,位置要对应.
image_1c0aigter1rdf10os11eqgtud3n5r.png-0.5kB
1赋值给了x
2赋值给了y
x与y叫做形参:需要引用、被赋值的参数
1与2叫做实参:实际的参数
1与2是真是存在的,会在内存中占用空间;x与y是形式上的参数,如果x与y没有引用任何值,则不会占用内存空间。

image_1c0aihlnd1n9jh8t1nagkeh12lg68.png-5.6kB
默认的情况下,赋值参数需要位置一 一对应,否则的话就需要指定参数的赋值
image_1c0aihvff4a02911tnc1qin1du6l.png-0.5kB

image_1c0aii5ao1a2me75flm1heq1tqp72.png-6.4kB
位置参数和关键词参数是可以混写的,默认参数需要位置对应,1赋值给了x,2赋值给了y
image_1c0aiifeo1vvhl2o151p190vrk67f.png-0.8kB

image_1c0aiikj7c9ultn3ks1pa150g7s.png-6.5kB

image_1c0aiipvm1n2ddce4svfbrm5e89.png-9.5kB
这样赋值是会报错的,第一个赋值是y=1(使用的是关键词参数赋值),第二个我们使用的是位置参数赋值,但是第二个参数根据位置应该对应的是y,课时y在前面已经被占用了,所以会报错。

image_1c0aijpat1kjk1bis14ur1o3v17tc8m.png-6.8kB

image_1c0aik4no1mtj1ioj1c4rv3ov1693.png-9.5kB
可以看到关键参数在位置后面写就没有报错;

5.

image_1c0aikt5u1v8mjuv14bj1r3pke9g.png-5.3kB
在创建函数时,可以给参数赋值默认的值
image_1c0ail5b21hn61m2l1btc1frb1u5s9t.png-0.5kB
在给参数赋值时,如果不从新赋值,那么参数就会使用创建函数时给赋予的默认值

image_1c0ailni812v9dkk4gm1m3n1m48aa.png-7.9kB
可以通过位置和关键词来修改默认参数值
image_1c0aim29kg52qor1fufq6n2p7an.png-1kB
把参数从新赋值就不会使用默认参数值了,会使用新的赋值来覆盖默认的参数值

默认参数的用途:比如安装软件的默认路径,或者一些默认勾选的选项; 比如设置某个程序的默认端口等等。

6.参数组

当定义一个函数的参数时,实参不能少于或多于形参,否则执行就会报错; 有多少个实参,定义函数时就得定义多少个形参,但是如果参数需要一万个,则不可能去写一万个参数。

所以这里我们可以使用参数组;当需要的参数数量过多或者实参所需求的数量不明确时,就可以使用参数组;

image_1c0ain8d9epu1l8m18u05ov15ivb4.png-5.8kB
定义参数组的关键符号是‘*’,后面定义一个组名即可
image_1c0ainhqv1opp16b7km5166po3gbh.png-1.3kB

可以看到定义多少个参数都可以,打印时以元组形式打印出来。

‘*’ 用来接收N个位置参数,转换成元组;不能接收关键字参数。。

image_1c0aioei0f991b8p13fv1r9gu0ubu.png-7kB
image_1c0aipn45q7l1517rt2r2toopdr.png-1.4kB
传参数值的时候,也可以使用,比如([1,2,3,4,5]),只不过打印出来的时候会转换成元组

image_1c0aiq2ni4cnoioll66gk9ne8.png-8.1kB
image_1c0aiq96j1chb12a6k8o13gj16n7el.png-2.1kB
使用两个*,表示可以传入字典参数; 把N个关键字参数,转换成字典的方式。
’用来接收N个关键字参数,转换成字典。

test(**{'name':'zhangsan','age':20})

image_1c0aire835bj1nv71asm1v0c2maf2.png-2.1kB
传入参数也可以使用两个**,只不过字典的写法稍有差别

image_1c0airveuen71m991n1vnpu79sff.png-11.4kB
image_1c0ais514npm1pni1i4q1l121s1pfs.png-3kB
打印字典key对应的value

def test3(name,**kwargs):print (name)print (kwargs)test3(123)

image_1c0aisrlg1rd4lnorvh5rr1lt6g9.png-0.8kB
位置参数和参数组一起使用;
这里没有定义参数组的值,所以打印出来为空的字典

def test3(name,**kwargs):
print (name)
print (kwargs)test3('lisi',age=20,sex='M')

image_1c0aitmaprhv1c8acoe1t5o1is8gm.png-2.3kB
位置参数和参数组的值,被分开打印了

def test4 (name,age=18,**kwargs):            #在写普通参数和参数组时,要把参数组写在后面print (name)print (age)print (kwargs)test4('lisi',sex='M',hobby='car')

image_1c0aiu6plh6d77l10hjciemu4h3.png-3.1kB
使用两个位置参数和一个参数组;第二个位置参数被打印的是默认值

test4('lisi',sex='M',hobby='car',age=20)

image_1c0aiutch1mnn1skatfnv6r1rnrhg.png-3.1kB
age位置参数不使用默认值,根据关键字参数的方式对其修改

test4('lisi',22,sex='M',hobby='car')

image_1c0aivenv154v15db106aj7ldhht.png-3kB
age根据位置参数的方式对其修改


image_1c0aj03jn1taim9c1736c2s6kfia.png-16kB

image_1c0aj0aqn7bq3d713uu1295crqin.png-4.3kB
*args 接收N个位置参数;**kwargs接收N个关键字参数; 在赋值个参数时,后面并没有符合位置参数的值,所以打印位置参数会显示一个空的元组。

test5 ('lisi',33,44,55,66,sex='M',hobby='car')

image_1c0aj0ti81fa74vl1hao9trql5j4.png-4.7kB
这样4种参数就都可以体现出来了

image_1c0aj19ou13c01ti31414kd6187rjh.png-24.3kB
函数嵌套函数;
image_1c0aj23d6ni21ek91v9p1nhssf0ke.png-5.5kB

image_1c0aj30ra1oenk3h1d5g1me01253lo.png-25.2kB

image_1c0aj2s191mh88qgi351gos1m30lb.png-28.6kB
可以看到此处的代码与上面的一样,只是logger这个函数在调用函数的下面,执行时就会报错,所以在调用函数时,一定要在相关函数的下面去掉用,否则是找不到相关内容的。

转载于:https://blog.51cto.com/daimalaobing/2046665

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习sql注入:猜测数据库_面向数据科学家SQL:学习简单方法

学习sql注入:猜测数据库We don’t pick a hammer and look for nails — that would be an unusual way of solving problems. The usual way of doing business is to identify the problem first, then look for appropriate tools.我们不用锤子找钉子,那是解决问…

android 百度地图3.0,android 百度地图3.0

一:为地图设置事件注意新版本中要有一个getMapmMapView.getMap().setOnMapStatusChangeListener(listener);OnMapStatusChangeListener listener newOnMapStatusChangeListener() {/*** 手势操作地图,设置地图状态等操作导致地图状态开始改变。* param s…

(摘录)sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ }; sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF_INET。 sa_data是14字节协议…

数据挖掘—K-中心点聚类算法(Java实现)

K-中心点聚类算法 (1)任意选择k个对象作为初始的簇中心点 (2)指派每个剩余对象给离他最近的中心点所表示的簇 (3)选择一个未被选择的中心点直到所有的中心点都被选择过 (4)选择一个…

使用akka构建高并发程序_如何使用Akka Cluster创建简单的应用程序

使用akka构建高并发程序If you read my previous story about Scalachain, you probably noticed that it is far from being a distributed system. It lacks all the features to properly work with other nodes. Add to it that a blockchain composed by a single node is…

pandas之数值计算与统计

数值计算与统计 对于DataFrame来说,求和、最大、最小、平均等统计方法,默认是按列进行统计,即axis 0,如果添加参数axis 1则会按照行进行统计。 如果存在空值,在统计时默认会忽略空值,如果添加参数skipna …

python自动化数据报告_如何:使用Python将实时数据自动化到您的网站

python自动化数据报告This tutorial will be helpful for people who have a website that hosts live data on a cloud service but are unsure how to completely automate the updating of the live data so the website becomes hassle free. For example: I host a websit…

一颗站在技术边缘的土豆

2012年开始上专业课,2013年打了一年游戏,年底专业课忘光了,但是蒙混过关没挂科,2014年7月份毕业,对这个社会充满向往。2014年9月份——方正代理商做网络安全公司。2015年3月份跳槽到一家vmware代理商公司。2016年6月&a…

leetcode 839. 相似字符串组(并查集)

如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “r…

android intent参数是上次的结果,【Android】7.0 Intent向下一个活动传递数据、返回数据给上一个活动...

1.0 可以利用Intent吧数据传递给上一个活动,新建一个叫“hellotest01”的项目。新建活动FirstActivity,勾选“Generate Layout File”和“Launcher Activity”。image修改AndroidMainifest.xml中的内容:android:name".FirstActivity&quo…

实习一年算工作一年吗?_经过一年的努力,我如何找到软件工程工作

实习一年算工作一年吗?by Andrew Ngo通过安德鲁恩戈 经过一年的努力,我如何找到软件工程工作 (How I landed a software engineering job after a year of hard work) Many of us think the path to becoming a software engineer requires years of education an…

学习深度学习需要哪些知识_您想了解的有关深度学习的所有知识

学习深度学习需要哪些知识有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) Corona was a huge challenge for many of us and affected our lives in a variety of ways. I have been teaching a class on Deep Learning at Friedrich-Alexander-University Erlan…

参加开发竞赛遇到的问题【总结】

等比赛完就写。 转载于:https://www.cnblogs.com/jiangyuanjia/p/11261978.html

html5--3.16 button元素

html5--3.16 button元素 学习要点 掌握button元素的使用button元素 用来建立一个按钮从功能上来说,与input元素建立的按钮相同button元素是双标签,其内部可以配置图片与文字,进行更复杂的样式设计不仅可以在表单中使用,还可以在其…

如何注册鸿蒙id,鸿蒙系统真机调试证书 和 设备ID获取

鸿蒙系统真机调试创建项目创建项目创建应用创建鸿蒙应用(注意,测试阶段需要发邮件申请即可)关联应用项目进入关联 添加引用准备调试使用的 p12 和证书请求 csr使用以下命令// 别名"test"可以修改,但必须前后一致,密码请自行修改key…

Java—实现 IOC 功能的简单 Spring 框架

编写一个实现 IOC 功能的简单 Spring 框架,包含对象注册、对象管理、及暴 露给外部获取对象的功能,并编写测试程序。扩展注册器的方式,要求采用 XML 和 txt 文件。 源代码 package myspring;import java.lang.reflect.Method; import java.…

读zepto核心源码学习JS笔记(3)--zepto.init()

上篇已经讲解了zepto.init()的几种情况,这篇就继续记录这几种情况下的具体分析. 1. 首先是第一种情况,selector为空 既然是反向分析,那我们先看看这句话的代码; if (!selector) return zepto.Z() 这里的返回值为zepto.Z();那我们继续往上找zepto.Z()函数 zepto.Z function(dom…

css flexbox模型_Flexbox和CSS Grid之间的主要区别

css flexbox模型by Shaira Williams由莎拉威廉姆斯(Shaira Williams) Flexbox和CSS Grid之间的主要区别 (The main differences between Flexbox and CSS Grid) Dimensions define the primary demarcation between Flexbox and CSS Grid. Flexbox was designed specifically …

置信区间估计 预测区间估计_估计,预测和预测

置信区间估计 预测区间估计Estimation implies finding the optimal parameter using historical data whereas prediction uses the data to compute the random value of the unseen data.估计意味着使用历史数据找到最佳参数,而预测则使用该数据来计算未见数据的…

鸿蒙系统还会推出吗,华为明年所有自研设备都升级鸿蒙系统,还会推出基于鸿蒙系统的新机...

不负期许,华为鸿蒙OS手机版如期而至。今日(12月15日),鸿蒙OS 2.0手机开发者Beta版本正式上线,支持运行安卓应用,P40、Mate 30系列可申请公测。国内媒体报道称,华为消费者业务软件部副总裁杨海松表示,按照目…