数据分析篇--Python基础篇--05各种函数

1.有名函数

print('aaa')
print('aaa')
def run(x,y):
    print(x)
    print(y)
    print(x,y)
    return x,y

run(1,2)

2.匿名函数

定义:没有名字的函数

仅仅用于临时使用一次的场景,没有重复使用的需要

语法 lambda空格+参数+冒号+函数体代码(表达式或者函数)

# 匿名函数的定义
# print(lambda x,y:x+y)
# 调用直接内存地址加括号 (它虽然没有名字)+括号可以调用
# 返回值省略了return
# 表达式
print((lambda x,y:x+y)(1,2))
# 函数
(lambda x,y:x+y)(1,2)
# 把内存地址赋值给一个变量没有意义
# 匿名函数的精髓就是没有名字,为其绑定名字是没有意义的
# f = lambda x,y:x+y
# print(f(1,2))
# 匿名函数与内置函数结合使用
# max min sorted
salarice = {
    'xialuo':30000,
    'xishi':20000,
    'zhangxi':10000
}
# 我们要比较的是薪资 求薪资最高的那个人名:比较的是value但结果取得是key
# 默认比较key值  返回也是key值
# print(max(salarice))      #错误
# 这个哈数需要获得字典的value  这样才会比较value
def fun(n):
    return salarice[n]

# 比较fun的返回值  也就是salarice的value的值  但是还是返回key,max的返回值是key
print(max(salarice,key = fun))

print(max(salarice,key = lambda n:salarice[n]))
# 最小值
print(min(salarice,key = lambda n:salarice[n]))
# 我们要比较的是薪资,返回的是人名
# 薪资反序
print(sorted(salarice,key = lambda n:salarice[n],reverse = True))
# 薪资正序
print(sorted(salarice,key = lambda n:salarice[n],reverse = False))

3.递归函数

1.什么是递归函数
    函数的递归调用是函数嵌套调用的一种特殊形式,在调用一个函数的过程中又直接或间接地调用该函数本身,称之为函数的递归调用
递归死循环是没有意义的
递归调用必须有连个明确的阶段:
    1.回溯:一次次递归调用下去,说白了就是一个重复的过程
            但需要注意的是每一次重复问题的规模都应该有所减少
            知道逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件
    2.递推:往回一层一层推算出结果

例1

def foo(n):
    print('from foo',n)
    foo(n+1)
foo(0)

例2

# 第五个人的年龄为第四个人加两岁
'''
age(5) = age(4) + 2
age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 18
'''
# 第几个人定义成n
'''
age(n) = age(n-1) + 2       # n > 1
age(n) = 18                 # m = 1
'''

# 递归调用就是一个重复的过程,但是每一次重复的规模都应该有所减少
# 并且应该满足某种条件的情况下结束重复,开始进入递推阶段

def age(n):
    if n == 1:
        return 18
    if n > 1:
        return age(n-1) + 2

print(age(5))

例3

# 把里面的数字取出来
L = [1,[2,[3,[4,[5,[6,[7,[8,[9]]]]]]]]]
# 循环需要考虑次数
for n in L:
    if type(n) is not list:
        print(n)
    else:
        for n in n:
            if type(n) is not list:
                print(n)
            else:
                # print('列表式%s'%n)
                for n in n:
                    if type(n) is not list:
                        print(n)
                    else:
                        # print('列表式%s' % n)
                        for n in n:
                            if type(n) is not list:
                                print(n)
                            else:
                                # print('列表式%s' % n)
                                for n in n:
                                    if type(n) is not list:
                                        print(n)
                                    else:
                                        # print('列表式%s' % n)
                                        for n in n:
                                            if type(n) is not list:
                                                print(n)
                                            else:
                                                # print('列表式%s' % n)
                                                for n in n:
                                                    if type(n) is not list:
                                                        print(n)
                                                    else:
                                                        # print('列表式%s' % n)
                                                        for n in n:
                                                            if type(n) is not list:
                                                                print(n)
                                                            else:
                                                                # print('列表式%s' % n)
                                                                for n in n:
                                                                    if type(n) is not list:
                                                                        print(n)
                                                                    else:
                                                                        # print('列表式%s' % n)
                                                                        pass


def search(L):
    for n in L:
        if type(n) is not list:
            print(n)
        else:
            search(n)
## 递归是函数的定义里面嵌套函数的调用
## 递归与循环的区别:
# 循环每一次都要判断,需要考虑很多次
# 递归只需要明确结束条件就行,按照规律进行重复调用,不需要考虑次数

4.闭包函数

# 1.函数的定义阶段:****
#     只检测函数的语法   不执行函数体代码
#     def 函数名+括号+冒号
#     缩进+体代码
#     2.函数调用阶段:******
#     函数的调用:函数名+括号
#         1.先找到名字     (找到工厂位置)
#         2.根据名字调用代码      (加了括号执行工厂进行加工)
#
def factory():
    '''
    这个注释是告诉别人功能的
    这是一个工厂
    :return:
    '''
    print('正在制造手机')     #代码相当于员工和机器
    print('正在制造手机')     #代码相当于员工和机器
    print('正在制造手机')     #代码相当于员工和机器
    print('正在制造手机')     #代码相当于员工和机器
    print('正在制造手机')     #代码相当于员工和机器
# name = 'zhanxi'
# print(id(factory))
#1.先找到名字    (找到工厂位置)
# print(factory)
factory()
# # 闭包
# # 闭是指该函数是一个内部函数
# # 包是指该内部的函数名字在外部被引用
def outer():    # 没有调用outer(),但是创造了outer这个函数
    # 1.只检测函数体的语法(工厂合不合格),不执行函数体代码(不使用工厂)
    print('外面的函数正在运行')
    def inter():
        print('里面的函数正在执行')
        # 3.返回inter函数的内存地址  想象成inter工厂的一把钥匙,由outer的物流return
    return inter
        # 2.执行了outer这个函数体代码,inter定义了但没有执行
inter = outer()     # 4.得到了里面的inter钥匙,取名字inter
# # inter工厂的钥匙   加开关()
# # 5.里面的inter钥匙加括号运行inter这个函数
inter()
# outer()()   #这种写法也可以,但不推荐   不规范
# 为函数体传值的方式一:参数
def func(x,y):
    print(x+y)
# 每次都是传入相同的参数
func(3,2)
func(3,2)
func(3,2)
func(3,2)
# 为函数体传值的方式二:闭包
def outer(x,y):
    def func():
        print(x+y)
    return func
# 每次都是传入同样的参数
func1 = outer(3,2)      # 把配料渗透到包子肉func函数地址里面去了
print(func1)
func1()
func1()
func1()
func1()

5.装饰器

# 装饰器就是一个特殊的闭包函数
# 1.什么是装饰器(就是一个函数,只不过这个函数不是给自己使用的,是给其他函数添加功能的)
#       器指的是工具,而程序中的函数就是具备某一功能的工具
#       装饰指的是为被装饰器对象添加额外功能
# 2.为什么要用装饰器
#       软件的维护应该遵循开放封闭的原则
#       开放封闭原则这的是:
#           软件一旦上线运行后对修改源代码是封闭的,对扩展功能是开放的
#           这就用到了装饰器
#       装饰器的实现必须遵循两大原则:
#           1.不修改被装饰对形象的源代码(人的原来的性格,生活方式)
#           2.不修改被装饰对象的调用方式(人的原来的外貌,名字)
# 错误---违反第一条
def run():
    print('跑步')
    print('健身')
run()

# 错误---违反第二条
def fitness():
    print('健身')
    run()

def run():
    print('跑步')

fitness()
# 示例1
name = 'zhangxi'
def run(name):
    print('==========')
    print('我是%s'%name)
    print('==========')
print(run)
run(name)

# 1.定义了decorate,检测decorate语法  new_func没有定义
def decorate(func):     #func等下我们要传入run
    print(func)
    def new_func(name):     #run(name) 的name
        print('这是装饰器前面的代码')
        func(name)
        print('这个装饰函数后面的代码')
    return new_func
# 2.1 定义了new_func(name)函数  2.2 返回了new_func的内存地址  2.3传入了一个run函数名作为decorate函数参数
run = decorate(run)
print(run)
run(name)
# 用到的知识点
# 1.传参  函数名传参   细节
# 2.new_func里面这个函数的参数  是被装饰函数的参数
# 3.return  mew_func 里面的这个函数
# 4.run_time(for1)的返回值是for1这个名字  但实际上是new_func函数名
# 示例二  测试for循环从1加到9000000的时间
from datetime import datetime
#当前时间
print(datetime.now())
#时间装饰器
n = 9000000

def run_time(func):     # 装饰谁就传谁 func是for1  这是一个用来计算程序执行时间的装饰器
    def new_func(n):    # for1(n)的n
        # 运行装饰的代码
        start_time = datetime.now()
        print('开始时间%s'% start_time)
        func(n)
        end_time = datetime.now()
        print('结束时间%s'% end_time)
        time1 = end_time - start_time
        print('花费时间%s'% time1)
    return new_func
# 1.定义了new_func(n)函数 2.返回了new_func内存地址 3.传入了一个for1函数名 4.返回值new_func函数名
# for1 = run_time(for1)
# print(for1)
# 被装饰的函数放装饰器后面
# 装饰器定义好直接用@ + 装饰器名字 就可以给被装饰函数进行装饰
@run_time
# 底层
def for1(n):
    sum1 = 0
    for i in range(1,n+1):
        sum1 += 1
        print(sum1)
for1(n)


@run_time
def shopping():
    for i in range(11111111):
        pass
    print('shopping')

shopping(1)

6.练习

写一个登录装饰器对一个函数进行装饰,要求输入账号和密码才能运行该函数
def run():
print(‘开始执行函数’)

def new_func(func):
    def wrappedfun(username, passwd):
        if username == 'root' and passwd == '123456789':
            print('通过认证')
            return func()
        else:
            print('用户名或密码错误')
            return
    return wrappedfun

@new_func
def run():
    print('开始执行函数')
run('root','123456789')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这个问题的意思是询问一个学习Python数据分析的100天计划,我的回答如下: Python数据分析是非常重要的技能之一,学习它需要长时间的实践和学习。以下是一个针对初学Python数据分析者的100天计划: 第1-30天:学习Python核心基础知识,包括变量、运算符、循环和函数。 第31-60天:学习Python数据分析中的重要模块,如NumPy, Pandas和Matplotlib。 第61-90天:开始应用所学的知识来分析真实的数据集,比如开始用Pandas和Matplotlib来处理一些数据集并进行数据可视化。 第91-100天:进行更高级的数据分析项目,并将学到的知识进一步提高。 在每一天的学习中,一定要坚持练习和自我检查,这样才能更快的提升技能。同时也不要忘记寻找其他技术爱好者的学习经验和技巧,交流并分享学习过程中的难点。 ### 回答2: 想要在100天之内精通Python数据分析,建议按照以下步骤进行: 第一步:基础语法 Python数据分析的第一步是掌握Python基础语法。你需要了解Python的基本数据类型、控制流结构、函数以及面向对象编程等知识点。可以通过网络课程、书籍、博客等方式来学习这方面的内容。 第二步:数据处理 很多时候,我们需要对数据进行清洗、预处理和分析。Python有许多用于数据处理的库,如Pandas、NumPy和SciPy等,它们提供了许多方便的数据处理方法和工具。 第三步:可视化 Python有许多用于数据可视化的库,如Matplotlib、Seaborn和Bokeh等。这些库可以帮助你用更美观简洁的方式将数据呈现出来。 第四步:机器学习 机器学习是数据分析的重要领域之一。Python中有许多机器学习库,如Scikit-learn、TensorFlow和PyTorch等。可以通过学习这些库中的算法来进行机器学习的探索。 第五步:实践项目 最后,要想真正掌握Python数据分析,需要进行实践项目。可以选择一些有兴趣的数据分析项目,如文本分析、图像处理和预测模型等,通过实践来提高自己的水平。 总之,在100天之内精通Python数据分析需要持续学习和实践。建议在这30天时间内花费适量时间每天坚持学习,并实践项目,千里之堤毁于蚁穴,只要每天坚持,你一定能够实现Python数据分析的精通。 ### 回答3: Python是一种高级编程语言,由于易学易用、简洁高效、生态完善等优势,目前已经成为了数据分析领域的重要工具。本文将介绍通过100天的坚持学习,如何精通Python数据分析。 第一步:Python基础数据分析中,Python基础知识十分重要。首先,需要了解Python的语法、数据类型、运算符、流程控制和函数等基本概念。此外,还需要掌握Python标准库、函数库和第三方库的使用方法。建议初学者先学习Python基础,例如可以通过《Python编程:从入门到实践》等书籍学习。 第二步:数据分析库 在Python中,数据分析主要依靠第三方库来实现。其中,NumPy、Pandas、Matplotlib和Seaborn等是常用的数据分析库。在学习这些库的使用时,需要了解它们的基础知识、常用函数以及如何使用这些函数进行数据分析。建议可以通过一些数据分析的案例来学习这些库的使用方法。 第三步:实战练习 学习数据分析不仅仅是学习理论和工具,还需要通过实际项目来练习和应用。可以尝试解决一些实际问题,并对数据进行分析和处理。例如,可以分析某一行业的数据,研究市场趋势和消费行为。通过实战练习可以更好地理解和掌握Python数据分析。 第四步:持续学习 学习是个无止境的过程,Python数据分析也不例外。持续学习可以让您掌握最新的技术和工具,同时也可以加强您的应用能力。建议可以通过阅读专业的书籍、参加培训课程或者加入相关社区等方式来持续学习。 总之,Python数据分析是一个需要不断学习和实践的过程。通过逐步学习,积累经验和技能,您可以在100天内或更短的时间内精通Python数据分析

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

spiders小张

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

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

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

打赏作者

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

抵扣说明:

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

余额充值