[笔记][cloudera课程][python数据分析]python进阶

7 篇文章 0 订阅
5 篇文章 0 订阅

python进阶

主要内容:


1、 自定义函数

def mysum(a,b,c):
    print('a+b+c = %d'%(a+b+c))
print(mysum(2,3,34))

1.1 函数定义

def myAbs(data):
    #参数检查
    if not isinstance(data,(int,float)):
        raise TypeError('您输入的数据类型错误,请输入整数或浮点数!')    
    if data < 0 :
        return -data
    else:
        return data

myAbs(0)

1.2 函数的参数检查

data = input('请输入一个数值:')
abs(data)  #出错,data读入的是一个str类型
abs(int(data)) 

1.3 自定义函数的参数(注意顺序)

python中的参数(有顺序):必填参数(位置参数)、默认参数、可变参数、命名关键字参数、关键字参数

①必填参数

def myPower(x,n): #x, n 为必填参数
    return x**n
myPower(2,5)

②默认值参数

def myPower(x,n=2): #n为默认值参数,可不填
    return x**n

③可变参数

def stuAvg(*info): #info为可变参数
    return sum(info)/len(info)
stuAvg(75,65,100,98,97,56,74)
stuScores = [75,65,100,98,97,56,74]
stuAvg(*stuScores) #可变数据需要加星号

④命名关键字参数

def person(name,sex='male',*,city,email): 
    #星号的作用:命名关键字参数需要一个可变参数占位,让解释器明白后面的参数是命名关键字
    return '你的姓名:{}, 性别:{},城市:{},电子邮件:{}'.format(name,sex,city,email)

person('zhang',city='chongqing',email='zhang@163.com')
person('zhang','',city='chongqing',email='zhang@163.com')

⑤关键字参数

返回和接受的类型:字典 dict

def person(**other): 
    #    return '姓名:{name},性别:{sex}年龄:{age}'.format(other)
    return '姓名:{0},年龄:{2},性别:{1}'.format(other['name'],other['sex'],other['age'])

person()  #dict类型
dictInfo = {'name':'zhang','sex':'male','age':22}
person(**dictInfo)

只取值的写法

def dataSave(**userInfo):
    return userInfo.values()
dictInfo = {'name':'zhang','sex':'male','age':22}
dataSave(**dictInfo)

1.4 递归函数

应用场景距离:游戏场景切换

计算阶乘 x=1*2*3*4*5*…*n
- 表示函数:fact(x)→→→ x*fact(x-1)

def fact(x):
    if x ==1:
        return 1
    return x*fact(x-1)
fact(5)
5*4*fact(3)

2、 iterable 可迭代对象

from collections import Iterable
def dataClien(data):
    if isinstance(data,Iterable):
        sum = 0
        for i in data:
            sum +=  i
        return '合计金额为:{}'.format(sum)
    else:
        return '合计金额为:{}'.format(data)
dataClien(100)
dataClien([100,200,43,35556])
isinstance(100,Iterable) #false
isinstance([100,200,43,35556],Iterable) #true
isinstance('hello',Iterable)
isinstance(True,Iterable)

3、 enumerate()

将list变成‘索引-元素对’

dozie = ['shu','niu','ma','hou']
for i,v in enumerate(dozie,3): #可以设置索引起始值
    print(i,v,sep='==>')

4、 列表生成式(列表解析,列表推导)

简单逻辑,不适用于太多层嵌套的循环

list(range(3,13,3))
lst = []
for i in range(1,13):
    if i%3 == 0:
        lst.append(i*i)
lst

改写成列表解析方式:

lst1 = [x*x for x in range(1,13) if x%3==0]
lst1

例子:

data = [x+y for x in 'abc' for y in 'XYZ' if x == 'a']
data

例子:读取磁盘目录

import os
my_dir = [d for d in os.listdir('d:/')]
my_dir

5、 生成器

一边循环一边计算,计算完成就结束

g = (x*x for x in range(10))
g
next(g)
for i in g:
    print(i)

例子:斐波拉契数列:
常规写法:

def fib(max):
    n,a,b = 0,0,1
    while n < max:
        print(b)
        a,b = b, a+b
        n +=1
fib(12)

yield关键字,产生生成器:

def fib(max):
    n,a,b = 0,0,1
    while n < max:
        yield b
        a,b = b, a+b
        n +=1
fib(12)
for i in fib(12):
    print(i)

6、 迭代器

集合数据类型(list/tuple/dict/set/str)
generator(生成器对象,带yield的generator function)
Iterable(可迭代对象,直接作用于for循环的对象)
Iterator(迭代器,可被next()函数调用,并不断返回下一个数据)

好处:实时保存,减少数据丢失

迭代器与可迭代对象的区别

#都是可迭代对象
test1 = [x*x for x in range(1,6)] #不可以用next(),不是迭代器
test2 = (x*x for x in range(1,6)) #能用next(),是迭代器
next(test1) #报错,列表不是迭代器
next(test2)

列表生成的也不是迭代器

from collections import Iterator
isinstance([X*X for X in range(5)],Iterator)
isinstance(fib(12),Iterator)
type(fib(12))

不过,可以转换成迭代器:

test1 = iter([x*x for x in range(1,6)])
next(test1)
  • python装饰器(引用自软件工程)————封装 深入学习
  • python支持多继承 Java C#是单继承多接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值