python基础学习三
来源:互联网 发布:mac tree 编辑:程序博客网 时间:2024/06/08 09:36
函数
python中的函数格式
def function_name(para1,para2)
python中函数特性(与c语言不同的)有:
- def是函数标志,函数名之前不用写返回类型
- 返回值可以有多个
- 调用函数,直接给形参赋值(形参=“值”),参数顺序可变。不推荐这样做
- 函数参数可以不固定
例1:传递一个参数
def test_Exam(word): name="my name is {}" print name.format(word)test_Exam('apple')控制台输出:my name is apple
例2:传递两个参数,主调函数和形参和实参名字相同并被赋予值,顺序不同,不影响输出结果。也可以按顺序传入参数。
def test_Exam(name,fruit): word="my name is {},I like {}" print word.format(name,fruit)test_Exam(fruit='apple',name="John") 控制台输出: my name is John,I like apple 顺序传入参数 def test_Exam(name,fruit):word="my name is {},I like {}"print word.format(name,fruit)test_Exam('apple',"John")结果相同
例3:函数返回值不止一个。当函数有一个返回结果,将得到一个返回值;当有多个返回结果,用自定义的一个变量名可以得到一个列表。如果要一一得到返回结果,需要和返回结果相同的变量接受返回结果。过多或者过少的接受变量,系统会报错。
#coding:utf-8def test_Exam(name,age,score): total=0 for s in score: total+=s return name,age,totaloutcom1=test_Exam('wangfang',23,[85,91,95]) #依次输入参数print outcom1outcom2=test_Exam(age=21,score=[86,82,88],name="lee") #直接给形参名赋值,顺序可以不同print outcom2sn,sa,sc=test_Exam(age=21,score=[86,82,88],name="lee")print sn,sc#score,name=test_Exam(age=21,score=[86,82,88],name="lee") 错误,用于接收的变量过少#print score,name控制台输出('wangfang', 23, 271)('lee', 21, 256)lee 256
传递可变参数
当用户可能输入多个参数,函数形参暂时没有办法确定。可以使用**kwargs和*args.两者的区别在于,前一个若作为返回值,将输出键值对的形式(所以调用函数时,未确定的参数要输入键值(变量名)),后一个只输出值。
#coding:utf-8def test_Exam(name,age,**kwargs): return name,age,kwargspar=test_Exam("xiaowang",23,score=86)#未知参数要输入变量和值print pardef test_Exam(name,age,*args): return name,age,argspar=test_Exam("xiaowang",23,86,88,89)#直接输入值即可print par控制台输出('xiaowang', 23, {'score': 86})('xiaowang', 23, (86, 88, 89))
函数参数默认值
可以为函数设置默认值,设置默认值的参数放在函数参数列表的最后。(为什么这样?因为可以优先给没有默认值的参数赋值)。可不可以参数都设置为默认值?(极端情况下,这个程序不需要接受用户输入,自己运行,那我们写的程序就没有意义。是不是就不满足算法的五个特性之一即至少一个输入?)
#coding:utf-8def test_Exam(name,age,score=86): print name,age,scoretest_Exam("xioawang",23)#只输入两个参数,最后一个参数默认值test_Exam("xiaoliu",21,99)#给最后一个参数赋值控制台输出xioawang 23 86xiaoliu 21 99
类
在c++和java中已经学习过面向对象的思想,类包括属性和函数(方法)。在phthon中,可以使用_init_(self,参数1,…)给属性赋值(类似与构造函数,如果有这个函数,每定义一个实例,将会运行这个函数)。在类中可以使用self.变量访问属性(相当于this函数).类的创建和生成实例例子如下:
#coding:utf-8class Student(object): name='' age=22 address='' def show_info(self): print self.name,self.age,self.address #self的作用类似thisstu=Student() #创建实例对象stuprint stu.age #访问对象的属性stu.show_info() #访问对象的函数stu.name="xiaowang"#给实例赋值stu.age=26stu.address="beijing"stu.show_info()#控制台输出22 22xiaowan 26 beijing
可以使用_init_()对类进行初始化,每创建一个实例就要执行这个函数。变量要是使用self.变量。
#coding:utf-8class Student(object): def __init__(self,age,name="xiaoming",address="beijing"): self.name=name self.age=age self.address=address def show_info(self): print self.name,self.age,self.address #self的作用类似thisstu=Student(name='zhangwei',age=28,address='shanghai') #创建实例对象并初始化print stu.age #访问对象的属性stu.show_info() #访问对象的函数stu.name="xiaowang"#给实例赋值stu.age=26stu.address="beijing"stu.show_info()控制台输出28zhangwei 28 shanghaixiaowang 26 beijing
类生成的对象。可以像字符的对象,int的对象一样,存储在列表、字典中中。
#coding:utf-8class Student(object): def __init__(self,name='',address='',age=''): if not name: name=raw_input("please input name") if not address: address=raw_input("please input address") if not age: age=raw_input("please input age") self.name=name self.address=address self.age=int(age) self.show_info() def show_info(self): print self.name,self.age,self.address #self的作用类似thisdef main(): stu1=Student() stu2=Student(name="wangfang",age=18,address='zhengzhou') stu=[stu1,stu2] for st in stu: print "name:{}".format(st.name) print "age:{}".format(st.age) print "address:{}".format(st.address)if __name__=="__main__": main()控制台输出please input nameleeplease input addresswuhanplease input age18lee 18 wuhanwangfang 18 zhengzhouname:leeage:18address:wuhanname:wangfangage:18address:zhengzhou
前面提到可以把类对象和其他基本类型一样,并进行使用。那怎么进行类对象大小比较呢?当我们print 类对象时,它应该输出什么呢?python不知道如何比较他们大小,我们需要自己去定义比较大小的函数,同样也不知道输出对象的哪些参数,都需要我们自己去定义。
- 使用__equal__(self,other)判断是否(==)相等
- 使用__gt__(self,other)判断是否大于(>)
- 使用__lt__(self,other)判断是否小于(<)
- 使用__gte__(self,other)判断是否大于等于(>=)
- 使用__lte__(self,other)判断是否小于等于(<=)
- 使用__str__(self)输出对象
例子如下:
#coding:utf-8class Student(object): def __init__(self,name='',address='',age=''): if not name: name=raw_input("please input name") if not address: address=raw_input("please input address") if not age: age=raw_input("please input age") self.name=name self.address=address self.age=int(age) def __eq__(self, other):#判断是否相等,(类似于c++中操作符重载),重载了基类型的方法 if self.age==other.age: print True else: print False def __gt__(self, other):#判断大于号左边的对象是否大于右边的对象,大于输出true if self.age>other.age: print True else: print False def __lt__(self, other): if self.age>=other.age: print True else: print False def __str__(self):#返回类型必须为一个字符串,否则会报错 return "my name is {},age {},address {}".format(self.name,self.age,self.address)def main(): stu1=Student(name="wangfang",age=18,address='zhengzhou') stu2=Student(name="xiaoming",age=26,address='wuhan') stu3=Student(name="lee", age=26, address='hanyang') stu3==stu2 stu1>stu2 print stu1 print stu2 print stu3if __name__=="__main__": main()控制台输出:TrueFalsemy name is wangfang,age 18,address zhengzhoumy name is xiaoming,age 26,address wuhanmy name is lee,age 26,address hanyang
类的继承
继承的思想和c++和java一样,假设我们创建基类class Person(object),要继承object这个类,所有的基类都要继承这个类。我们创建派生类class Student(Student),class Worker(Student),继承基类。在派生类中调用.super()函数可以直接用基类中的函数,不需要编写重复的代码:
#coding:utf-8class Person(object): def __init__(self,name='',sex='male'): self.name=name self.sex=sex def __str__(self): return "my name is {},age {}".format(self.name,self.sex)class Student(Person): def __init__(self,name='',sex='',address='',age=''): super(Student,self).__init__(name=name,sex=sex) if not address: address=raw_input("please input address") if not age: age=raw_input("please input age") self.address=address self.age=int(age) def __str__(self):#返回类型必须为一个字符串,否则会报错 return "my name is {},sex {},age {},address {}".format(self.name,self.sex,self.age,self.address)class Worker(Person): def __init__(self,name='',sex='',position='',tel=''): super(Worker,self).__init__(name=name,sex=sex) if not position: position=raw_input("please input position") if not tel: age=raw_input("please input tel") self.position=position self.tel=tel def __str__(self):#返回类型必须为一个字符串,否则会报错 return "my name is {},sex {},position {},tel {}".format(self.name,self.sex,self.position,self.tel)def main(): stu=Student(name="wangfang",sex="female",age=18,address='zhengzhou') wor=Worker(name="xiaoming",sex="female",position='leader',tel='2589') print stu print worif __name__=="__main__": main()控制台输出:my name is wangfang,sex female,age 18,address zhengzhoumy name is xiaoming,sex female,position leader,tel 2589
包的导入
导入包可以提高编程效率。在python中导入的语句为 from 模块 import 函数 。下面介绍几个常用的模块和函数,需要了解更多包可以登录 更多包的信息.
random模块中的randint()函数接受两个整数参数,输出一个包括左右两两端的随机数。
#coding:utf-8from random import randint#从random模块中导入randint()函数test_random=[]for i in range(5): num=randint(1,20) test_random.append(num)print test_random控制台输出:[12, 12, 19, 3, 5]
random模块中包含一个random()函数,不接受参数,返回一个(0,1)之间的随机浮点数.例子
#coding:utf-8from random import random#从random模块中导入random()函数test_random=[]for i in range(10): num=random() test_random.append(num)print test_random#输出(0,100)之间的整数for i in range(10): print int(test_random[i]*100)控制台输出:[0.07726934698627286, 0.1344094564532684, 0.24215768279396688, 0.01072124610336389, 0.9854731663512878, 0.6447458833785876, 0.42872186552424196, 0.745168512365353, 0.8498303290273697, 0.7018554819212699]713241986442748470
random模块中使用randint(para1,para2)可以打印出[para1,para2]之间的任意整数,那么怎么打印出两个数之间的浮点数呢?使用uniform(para1,para2)可以解决这个问题
#coding:utf-8from random import uniform#从random模块中导入random()函数test_random=[]for i in range(10): num=uniform(3,5) test_random.append(num)print test_random控制台输出:[4.666427103228829, 4.388414947551379, 3.29957256799056, 4.266960999462864, 4.468409921451909, 3.6386073206159177, 3.0895111140399214, 4.005002567683271, 3.0892633450877414, 3.867633906]
当我们在举办比赛中随意挑选一个幸运观众时,使用python怎么实现呢?random模块中的choice()函数可以很好的解决这个
#coding:utf-8from random import choice#从random模块中导入random()函数test_random=['liu','wan','lee','zhou','dong','shen','leng']for i in range(5): print choice(test_random)控制台输出:shenzhoulengwanlee
datime模块中的几个常用函数
time()函数。可以接受四个参数,时、分、秒、微秒。可以进行时间的比较和基本计算。
#coding:utf-8from datetime import time#nowTime=time()print nowTimenowTime=time(12)#一个参数print nowTimenowTime=time(12,28)#二个参数print nowTimenowTime=time(12,28,36)#三个参数print nowTimenowTime2=time(12,28,28)#三个参数print nowTime>nowTime2控制台:00:00:0012:00:0012:28:0012:28:36True
datetime()函数。可以使用datetime.now()输出当前时间,使用datetime()生成的时间可以计算两者之差。使用timedelta()函数用来对日期进行加减。
#coding:utf-8import datetimetime1=datetime.datetime.now()#输出当前日期时间print '现在时间为:{}'.format(time1)time2=datetime.datetime(year=2017,month=9,day=15,hour=12,minute=35,second=16)time3=datetime.datetime(year=2017,day=21,month=10,hour=18,minute=36,second=25)print 'time3时间为:{},time2的时间为:{},相差的日期为:{}'.format(time3,time2,time3-time2)#输出两个日期相差的天数#timedelta()函数用来对日期进行加减temp=datetime.timedelta(hours=3,minutes=8)print '现在时间加上3小时8分为:{}'.format(time1+temp)控制台输出为:现在时间为:2017-10-21 22:33:17.733000time3时间为:2017-10-21 18:36:25,time2的时间为:2017-09-15 12:35:16,相差的日期为:36 days, 6:01:09现在时间加上3小时8分为:2017-10-22 01:41:17.733000
- Python基础学习三
- Python学习基础三
- Python基础学习<三>
- python基础学习三
- python基础学习(三)
- python基础学习三:数据类型
- Python基础学习(三)
- Python基础函数学习笔记(三)
- 机器学习之python基础(三)
- python 学习(三)基础语法
- Python学习笔记三:基础语法
- python基础学习记录(三)
- python基础学习笔记(三)
- python--基础学习(三)字符串单引号、双引号、三引号
- python--基础学习(三)字符串单引号、双引号、三引号
- Python学习笔记之Python基础(三)-输入
- 《零基础学Python》Adventures IN Python学习笔记三
- 《零基础入门学习python》学习过程(三)
- linux下最好用的mplayer播放器使用方法(转)
- SQL学习之--《SQL必知必会》
- 遗传算法小示例
- UVA10282 map容器使用
- WordPress显示评论者IP归属地、浏览器、终端设备、电信运营商
- python基础学习三
- Linux Shell经典面试题(其二)
- 1021. 个位数统计 (15)
- AlphaGo Zero都开始自学了,你今天机器学习了吗
- linux命令--xargs
- 第三次实验
- gradle打印所有task的输入输出、打印所有task的依赖关系
- 21st-Oct 关于string数组: 下一个string数组为什么会受到上一个的影响
- java源码之浅谈LinkedHashMap