python学习笔记之函数,类,模块

 函数:

     基础:

#基本语法
def <函数名>(<参数0个或多个>):
    <函数体>
    return <返回值>


如果未设置return ,默认返回None

#查看函数
dir(_builtins_)

#基础使用
def helloworld():
    print('调用函数')

helloworld() #调用
print('调用完毕')


   函数名注意事项: 

  1. 关键字不能作为函数名字
  2.  函数名中不能存在空格
  3. 函数名的首字母必须是大小写字母或者下划线
  4. 函数名的其余字母可以使用字母、数字以及下划线
  5. 不同函数名大小写不同的时候为不同函数
  6. 常用的命名方式:字母+下划线+字母

     传参:

#自定义函数传参
def test(name,age):
    print("姓名%s,年龄%s"%(name,age))
test('程序员',20) #传参位置不能打乱
test('程序员',age=20)    #关键字参数,部分指定时,左边可以不指定,从右边指定开始
                         #减少因为参数位置和类型不一致的报错

#设置默认值
def test(name='程序员',age=18):  
 print("姓名%s,年龄%s"%(name,age))
test()  ##函数默认输入一个值或者未输入的情况下,赋值

#传递任意数量的参数值
   *函数名([param1,param2,…]paramX)
   带“*”的paramX参数,可以以接收任意数量的值
   自定义函数只能有一个带"*"的参数,只能放置最右边的参数中否则自定义函数执行时报错
def test(name,*attributes):
    print(name)
    print(type(attributes))
test('11','22','33','44')
#传递任意数量的键值对
  函数名([param1,param2,…]**paramX)
def test(name,**attributes):
    print(name)
    print(type(attributes))
    return attributes
test('兔子',color='白色',shape='圆形',)

return语句:

def get_sum(a,b):
    sum = a + b
    print('调用了这个函数')
    return sum
    print('完成了')   #return 后面的语句不会执行 

s = get_sum(1,2)
print(s)


def get_data():
    a = 1
    b = 2
    c = 3
    d = 4
    return a,b,c,d  #可以返回多个值,多个值放在元组中
print('返回值的类型:',type(get_data()))
print('返回值:',get_data())

作用域:

num = 5           #全局变量
def sum():      
    k=2           #局部变量  
    global num     #声明,修改全局变量

匿名函数:

#lambda表达式
  作用:
   1 常用于数据筛选
   2 解决数据复杂繁琐的问题
   3 代码简洁
   4 优化代码

m = int(input('请输入一个数字:'))#m为输入的值
a = lambda x : x * x #使用变量a来构成一个表达式
print('返回值为:',a(m))

my_list = [1,4,6,9,12,23,25,28,36,38,41,56,63,77,88,99]
print(list(filter(lambda x : x % 2 == 0,my_list)))
     #filter函数:过滤作用

基础函数: 

#filter(函数,可迭代对象) 数据筛选和过滤
def test(x):
    if x % 2 == 0:
        return x
my_list = [1,2,3,4,5,6]
print(filter(test,my_list))#只需要些函数名即可,不用加参数

#map(函数,可迭代对象)  数据的处理
def test(x):
    if x.islower():
        return x.upper()
    else:
        return x
my_list = ['d','o','t','C','p','P']
print(list(map(test,my_list)))  #['D', 'O', 'T', 'C', 'P', 'P']

#reduce(函数, 可迭代对象[, 初始值]) 数据聚合
from functools import reduce#reduce函数在functools模块中定义,需要引入
def test(x,y):
    return x * y
my_list = [1,2,3,4]
print(reduce(test,my_list))

递归函数:

m = int(input('输入一个数字:'))
def test(x):
    x += 2
    if x <100:
        test(x)
    else:
        print('最后的x为:',x)
test(m)

内置函数:

函数名方法说明

abs()

绝对值

bin()

二进制

bool()

布尔值

chr()

用一个范围在256内的整数作参数,返回一个对应的字符

cmp(x,y)

用于比较,前者大于后者返回1,相等返回0,小于后者返回-1

compile()

将字符串便以为字节代码

complex()

创建一个复数

dict()

创建字典

divmod(x,y) 

返回一组值,前者为x和y的商,后者为余数

enumerate()

返回序列中元素及其索引值,使用for循环可依次输出。

eval()

返回字符串表达式的值

file() 

创建一个 file 对象

filter() 

过滤函数

float()

把整数和字符串转换成浮点数

format()

格式化函数

getattr() 

一个对象属性值

globals()

全局变量

hash() 

返回一个对象的哈希值

help() 

查看函数或者模块的功能

hex()

将10进制整数转换成16进制

id()

返回一个对象在内存中的地址

 input() 

标准输入

isinstance() 

判断一个对象是否为已知的类型

int() 

把字符串或数字转换为整型

len()

返回序列的长度

list()

把其他数据类型转换为列表

locals()

返回当前位置的所有局部变量

long()

把一个数字或字符串转换为长整型

map()

映射函数

max()

返回最大值

min()

返回最小值

next()

返回迭代对象的下一项

oct()

整数转换八进制数

pow(x,y)

返回x的y次方

print()

输出

range()

创建整数序列

reduce()

聚合函数

reload()

重载模块

reverse()

逆序

round()

对浮点数四舍五入

set()

创建集合

sorted()

排序

sum()

求和

zip()

将可迭代的多个对象中根据对应关系组合在一个元组中

闭包函数:

j = 5           #全局变量
def sum():     
    k=2         #闭包变量
    def sum(): 
        i=k+j    #局部变量
        return i
    return sum()

扩展:

import decimal
num=decimal.Decimal('0.12')
num1=decimal.Decimal('0.12')
print(num+num1)

面向对象:

面向对象编程有三大特点:封装、继承和多态

基础(类):

#基本语法结构
class Name:   #使用class定义类,Name是类名,一般首字母大写
    '''类文档'''
    content

#例子:
class School:#这种方式我们就定义了一个类,如果我们要调用这个类
    '''定义一个学校类'''
    def __init__(self):
        print('这里是__init()__方法')
    def __judge__(self):
        print('判断这个方法是否被调用')
school = School()


#__init__()方法属于构造方法,每次调用School类都会使用__init__方法,参数传递也是在__init__方法里
  #__init__方法中必须包含一个self参数,也必须是第一个参数,
  #参数是指向这个实例本身的,可访问School类中存在的属性和方法

class GetAge:
    def __init__(self,name,age): 
        self.name = name
        self.age = age
        print('%s的年龄为%d'%(name,age))
GetAge('小明',18)  #传递参数

  类的方法:

class Library:
    def __init__(self,name,id,age):
            self.name = name
            self.id = id
            self.age =age
    def borrow(self,bookname):
            self.bookname = bookname
            print('%s借阅了书籍--%s'%(self.name,self.bookname))
            print('借阅者学号为%d,年龄为%s'%(self.id,self.age))
                        print('借书成功!')
xiaoming = Library('小明',1001,20)
xiaoming.borrow('Python教程')


class BookStore:
    def __init__(self,bookname,bookcount):
        self.bookname = bookname
        self.bookcount = bookcount
    def sell(self):
        self.bookcount -= 1
        print('%s现在有%s本'%(self.bookname,self.bookcount))
    def buy(self):
        self.bookcount += 10
        print('%s现在有%s本' % (self.bookname, self.bookcount))
own = BookStore('Python学习教程',100)
own.sell()
own.buy()
own.sell()

继承示例:

#继承:子继承父
class Base:#定义一个名为Base的父类
    def __init__(self,name,age,id):
        self.name = name
        self.age = age
        self.id = id
        print('继承了Base这个类')
        print('我的名字:',self.name)
        print('我的年龄:',self.age)
        print('我的学号:',self.id)
    def goto_school(self):
        print(self.name,'正在使用Base类中的goto_school方法去上学')
class Student(Base):#继承父类的时候会继承父类中的所有方法
    pass
xiaoming = Student('小明',20,1001)
xiaoming.goto_school()

重写示例:

#重写:基于继承的一种方法,如果不想要从父类中继承来的属性或者行为,可以在子类中进行方法的重写
class Base:#定义一个父类
    def __init__(self,name):
        self.name = name
        print('继承了Base')
    def eat_dinner(self):
        print(self.name,'晚饭吃火锅')
class Student(Base):#继承父类的时候会继承父类中的所有方法
    def eat_dinner(self):
        print(self.name,'晚饭吃自助餐')
xiaoming = Student('小明')
xiaoming.eat_dinner()

多态示例:

#多态:继承和重写两种方式的结合,通过多态我们可以写出各种各样的程序
class Base:
    def __init__(self,name):
        self.name =name
        print('%s会读书'%self.name)
    def reading(self):
        print('%s在读语文书'%self.name)
class Inherit_One(Base):
    def reading(self):
        print('%s在读英语书'%self.name)
class Inherit_Two(Base):
    def reading(self):
        print('%s在看漫画书'%self.name)
a = Base('a')
a.reading()
b = Inherit_One('b')
b.reading()
c = Inherit_Two('c')
c.reading()

模块开发:

模块分类:

  1. 系统库中存在的模块
  2. 第三方模块
  3. 自定义模块

 引入方法:

#import 模块名   直接调用了模块中的所有方法
import random#从系统库中引入这个模块
test = random.randint(1,10)#使用random模块中的randint()方法
print('生成一个随机数:',test)

#import 模块名 as 别名(注意在命名的时候不要使用符号)
import math as t
test = t.cos(2.5)
print(test)

# from 模块名 import 函数名  仅仅调用了模块中的一个函数
from random import randint
test = randint(1,10)
print(test)

math模块:

#math模块提供了关于数学方面的功能,可以帮助我们进行指数、对数、平方根、三角函数等运算。
math.log(x[,底数])  对数运算,以基数为底的x的对数,如果省略底数就是以2为底
math.sqrt(x)        平方根运算,x的平方根
math.pow(x,y)       取幂运算,x的y次幂
#三角函数
math.sin(x)         三角正弦值
math.cos(x)         三角余弦值
math.tan(x)         三角正切值
math.asin(x)        弧度的反正弦
math.acos(x)        弧度的反余弦
math.atan(x)        弧度的反正切
math.degress(x)     弧度转角度
math.radinans(x)    角度转弧度

math.ceil(x)       返回大于x或等于x的最小整数。
math.floor(x)      返回小于x或等于x的最大整数
round(x)           四舍五入

#例子
import math
a = math.log(144,12)
b = math.sqrt(36,6)
c = math.pow(10,3)
print(a)
print(b)
print(c)

b = math.cos(30)
c = math.tan(30)
d = math.asin(0.6)
e = math.acos(0.6)
f = math.atan(0.6)
g = math.degrees(2 * math.pi)
h = math.radians(360 / math.pi)
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(g)
print(h)

a = math.ceil(3.5)
b = math.floor(3.5)
c = round(3.5)
d = round(3.4)
print(a)
print(b)
print(c)
print(d)

random模块:

random.random()       生成一个[0,1)的实数。
random.randint(a,b)   生成一个[a,b]的数字,包含a和b。
random.randrange(a,b) 生成一个[a,b)的数字,包含a,不包含b。
random.shuffle(x)      把序列x打乱。
random.choice(x)      从x中返回一个随机项,x需要是一个可变序列。
random.uniform(a,b)   生成一个a,b之间的浮点数,区间可以是浮点数。

#例子
import random
a = random.random()
print(a)

a = random.randint(1,3)
print(a)

a = random.randrange(1,3)
print(a)

a = ['d','o','t','c','p','p']
print('打乱前的列表:',a)
random.shuffle(a)
print('打乱后的列表:',a)

a = ['d','o','t','c','p','p']
print(random.choice(a))

a = random.uniform(1.1,3.3)
print(a)

datetime模块:

       datetime:

#datetime
datetime的使用方法为:
datetime.dateto,e(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
  year,month和day是不能缺少的,
  tzinfo为时区参数,可以为None或其他参数
  MINYEAR <= year <= MAXYEAR,
  1 <= month <= 12,
  1 <= day <= number of days in the given month and year,
  0 <= hour < 24,
  0 <= minute < 60,
  0 <= second < 60,
  0 <= microsecond < 1000000,
  fold in [0, 1].

  #常用的方法
  datetime.datetime.now()  返回当前的日期和时间
     date()                   返回当前时间的日期
     time()                   返回当前的时间对象
     utctimetuple()           返回UTC时间元组

#例子
import datetime
t = datetime.datetime.now()#返回当前日期及时间
print(t)

t = datetime.datetime.now()#返回当前日期及时间
print(t.date())#输出当前的日期

t = datetime.datetime.now()#返回当前日期及时间
print(t.time())#输出当前的时间

t = datetime.datetime.now()#返回当前日期及时间
print(t.utctimetuple())#输出当前的日期

       date:

#date
 date对象是日期的专属对象
   datetime.date(year,month,day),参数分别代表年月日。

 #常用方法:
  datetime.date.today()           返回了当前的日期
  datetime.date.fromtimestamp()   返回与时间戳对应的日期

#例子:
import datetime
t = datetime.date.today()#返回当前日期
print(t)

import datetime
import time
c = time.time()#返回当前的时间戳
print('当前的时间戳为:',c)
t = datetime.date.fromtimestamp(c)#与时间戳对应的日期
print('当前时间戳对应的日期为:',t

      time:

#time
time类中包含了一整天的信息
   datetime.time(hour,moniute,second,microsecond,tzinfo=None)

#例子:
import datetime
t = datetime.time(19,42,34,12)
print(t)

第三方模块:

    安装:

         1 cmd安装:

                   window+r=====>输入cmd====>输入pip list ====>输入 pip install 模块名

         2 Pycharm中安装

 异常处理:

    常见异常:

  •       KeyError异常:

访问字典的键,而键值不存在的时候发生的异常    

    my_dict = {'dotcpp':123}

    print(my_dict['dot'])

报错信息:

  •  IndexError异常

 访问序列元素的时候,索引值超出范围的时候会触发这种异常机制

   my_list = [1,2,3,4,5]

   print(my_list[100])

报错信息:

  •  NameError异常

使用一个未定义的变量时会引发此异常  

   name = ['www.dotcpp,com']

   print('存在的变量name:',name)

   print('不存在的变量dotcpp:',dotcpp)

报错信息:

  •  TypeError异常

传递的数据与规定的类型不一致的时候

   a = 10

   b = 'dotcpp'

   print(a+b)

   报错信息:

 异常处理语句:

  •    try...except语句

#语法
try:
    block
Except [typeerror ]:
    deal

block       程序执行过程中可能会抛出异常的语句,
typeerror   错误类型,省略不指定类型,即捕获全部异常
deal        具体的处理语句


#例子:
def test():
  number = int(input('请输入一个数字:'))
  if 15 / number >= 3:
    print('ok')
  else:
    print('wrong')
try:
  test()
except:
  print('分母为0的异常情况')
  • except代码块

#try...except语句一种扩展,于一个问题可能会出现多种错误的情况,那么我们可以对每一种情况都做一定的处理
Try:
    Test()
except [异常类型1]:
    deal
except [异常类型2]:
    deal
except [异常类型3]:
    deal

#例子:
def test():
  number = int(input('请输入一个数字:'))
  if 15 / number >= 3:
    print('ok')
  else:
    print('wrong')
try:
  test()
except ZeroDivisionError:
  print('分母为0的异常')
except ValueError:
  print('传入的值异常')
  • try...except语句的嵌套:

def test():
  n = int(input('有3个语句需要测试,请选择(1/2/3):'))
  if n == 1:#keyError异常情况
    my_dict = {'dotcpp': 123}
    print(my_dict['dot'])
  elif n == 2:#IndexError异常
    my_list = [1, 2, 3, 4, 5]
    print(my_list[100])
  elif n == 3:#NameError异常
    print('不存在的变量dotcpp:', dotcpp)
try:
  try:
    try:
      test()
    except KeyError:
      print('KeyError异常')
  except IndexError:
    print('IndexError异常')
except NameError:
  print('NameError异常')
  • try...except...finally语句:

#一个完整的异常处理机制是离不开finally语句,不管我们的程序中是否有异常发生,finally语句下的代码都会被执行

try:
    block
except [typeerror]:
    deal1
finally:
    deal2

#例子:
def test():
  n = int(input('请输入一个整数:'))
  print(n)
try:
  test()
except KeyError:
  print('KeyError异常')
finally:
  print('finally语句已执行')
  • try...except...else语句:

#当程序中未发生异常的时候才会执行
try:
    block
except [typeerror ]:
    deal1
else:
    deal2

#例子:
def test():
  n = int(input('请输入一个整数:'))
  print('输入值为:',n)
try:
  test()
except ValueError:
  print('ValueError异常')
else:
  print('当前程序未出现异常')

程序调试:

    使用IDLE调试:

          python.exe==>Debug==>Debugger==>DEBUG ON](已开启调试状态)==>选择调试的代码            ==>右击Set Breakpoint(添加断点)/(Clear Breakpoint删除断点)==>F5键开始调试==>关闭页             面停止调试

 使用assert断言调试:

assert expression[,describe]
   expression:一个表达式,真不采取操作,反之AssertionError异常

#例子:
n = int(input('请输入一个整数:'))
m = int(input('请输入一个整数:'))
assert n > m,'wrong'
print('程序可以正常运行')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛刘刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值