广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python入门学习(六)
  • 699
分享到

Python入门学习(六)

入门Python 2023-01-31 07:01:06 699人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

在熟悉了python中常用的一些内置函数, 那接下来我们定义一个自己的函数吧 def add(x, y): return x + y 函数 函数语法 def functonname(parameters): ...

在熟悉了python中常用的一些内置函数, 那接下来我们定义一个自己的函数吧

def add(x, y):
    return x + y

函数

函数语法
def functonname(parameters):
    ...
    return result
定义空函数
def nop():
    pass
实际上 pass 是用来作为占位符的. 比如现在还没想好怎么写函数的代码, 就可以先放一个pass, 让其他代码可以运行起来.
函数也是Object
def pow(x, y):
    result = 1
    for i in range(0, y):
        result = result * x
    return result

print(pow) #<function pow at 0x104147e18>

函数也是内存中的一块区域, 函数名指向这块区域.

fn = pow
print(fn) #<function pow at 0x104147e18>
print(fn(2, 10)) #1024

参数

  • 必选参数
  • 默认参数
  • 可变参数
  • 关键字参数
  • 命名关键字参数

必选参数

def pow(x, y):
    result = 1
    for i in range(0, y):
        result = result * x
    return result

t = pow(2, 3)
print(t) # 8

上面函数中, 需要两个参数分别是 x, y. 这两个参数都是必选参数, 缺一不可.
pow函数中 x 为底数, y 为指数, 现在我想让指数默认为 2

默认参数

def pow(x, y = 2):
    result = 1
    for i in range(0, y):
        result = result * x
    return result

t = pow(2)
print(t) # 4

设, 我要求多个数的和. 具体有多个参数, 我也不知道

可变参数

def sum_1(numbers):
    s = 0
    for x in numbers:
        s += x
    return s

def sum_2(*numbers):
    s = 0
    for x in numbers:
        s += x
    return s

arr = [1, 2, 4]
print(sum_1(arr))
print(sum_2(1, 2, 4))
print(sum_2(*arr))

关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

def person(name, age, **kw) :  # ** => dict
    print("kw tyep is", type(kw))
    if "city" in kw : 
        print("city :", kw["city"])
    if "job" in kw:
        print("job :", kw.get("job"))
    print("name:", name, ", age:", age, ", other:", kw)


person("Jion", 18, city = "Beijing")
person(name = "Tom", city = "Beijing", age = 17)
extra = {'city': 'Beijing', 'job': 'Engineer'}
person("Jion", 18, **extra)

命名关键字参数

如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数

def person(name, age, *, city, job):
    print(name, age, city, job)

命名关键字参数需要一个特殊分隔符 * ,* 后面的参数被视为命名关键字参数。

>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符 * 了.

def person(name, age, *, city = "Beijing", job):
    # 要限制关键字参数的名字, 就要用到 "命名关键字参数"
    # * 后的参数, 被视为"命名关键字参数"
    print(name, age, city, job)
person("Jack", 24, job = "Engineer")
x = {"city":"Shanghai", "job":"Engineer"}
person("Jack", 23, **x)
person("Jack", 23, city = "Beijing", job = "Engineer")

def person(name, age, *args, city, job):
    print(name, age, args, city, job)
x = {"A":1, "B":2, "C":3}
# 当实参为 *x 时, 会将实参中的key以tuple(元组)的形式, 传递到方法内
# person("Jack", 23, *x, city = "Beijing", job = "Engineer") # Jack 23 ('A', 'B', 'C') Beijing Engineer

# 当实参为 x 时, 会将实参的整体内容做为tuple(元组)的一个元素, 传递到方法内
person("Jack", 23, x, city = "Beijing", job = "Engineer") # Jack 23 ({'A': 1, 'B': 2, 'C': 3},) Beijing Engineer

返回值

返回常用类型

def abs(x):
    if(x >= 0):
        return x
    else:
        retrun -x

print(abs(-1)) #1
return 类似出栈操作, return之后的语句则不被执行

返回多个值

def show(x, y, z):
    return x  * y * z, x + y + z

x = show(2, 3, 4)
print(x[0], x[1]) #24 9
print(x) #(24, 9)
当函数返回多个值时, 实际上是把多个需要返回的值, 封装成一个tuple

返回函数

刚刚说过, 函数也是一个Object, 所以也可以作为返回值进行返回

递归
def trim(s):
    if (s == ''):
        return ''
    if (ord(s[:1]) == 32):
        return trim(s[1:])
    elif (ord(s[-1:]) == 32):
        return trim(s[:-1])
    else:
        return s

这是一个去除字符串前后空格的函数, 首先检测字符串的第一位是不是空格, 如果是去掉第一位, 再次检查新字符串的第一位 直至不是后, 检查字符串的最后一位, 如果是, 则去掉最后一位, 再次检测新字符串的最后一位.直到最后一位,不再是空格.

闭包
def make_adder(addend):
    def adder(augend):
        return augend + addend
    return adder

p = make_adder(23)
q = make_adder(44)

print(p(100)) #123
print(q(100)) #144

闭包: 可以形象的把它理解为一个封闭的包裹,这个包裹就是一个函数,当然还有函数内部对应的逻辑,包裹里面的东西就是自由变量,自由变量可以在随着包裹到处游荡。当然还得有个前提,这个包裹是被创建出来的。
在通过Python的语言介绍一下,一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量。

def func(name):
    def inner_func(age):
        print 'name:', name, 'age:', age
    return inner_func

bb = func('the5fire')
bb(26)  # >>> name: the5fire age: 26

这里面调用func的时候就产生了一个闭包——inner_func,并且该闭包持有自由变量——name,因此这也意味着,当函数func的生命周期结束之后,name这个变量依然存在,因为它被闭包引用了,所以不会被回收。

def hellocounter (name):
    count = 0
    def counter():
        # 如果不加 nonlocal 会报错
        # UnboundLocalError: local variable 'count' referenced before assignment
        nonlocal count
        count += 1
        print ('Hello {0}, {1} access!'.fORMat(name, count))
    return counter

hello = hellocounter('ysisl')
hello()
hello()
hello()

在闭包函数内, 可以直接访问父函数作用域下的变量, 但不可以修改.
python3里面,引入了一个关键字:nonlocal,这个关键字是干什么的? 就是告诉python程序, 我的这个count变量是再外部定义的, 你去外面找吧. 然后python就去外层函数找, 然后就找到了count = 0 这个定义和赋值, 程序就能正常执行了.

装饰器

装饰器: 是对闭包的一种实际运用的场景.

def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makebold
@makeitalic
def hello():
    return "hello world"

print hello() # <b><i>hello world</i></b>

相当于 makebold(makeitalic(hello()))

import time

def timecost(func):
    def wrapper(*args, **kw):
        def fn(*args, **kw):
            start = int(time.time())
            print("Call {0}() Before [{1}]".format(func.__name__, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(time.time())))))
            func(*args, **kw)
            print("Call {0}() After [{1}]".format(func.__name__, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(time.time())))))
            end = int(time.time())
            print("Run Cost Time {0}s".format(end - start))

        return fn(*args, **kw)
    return wrapper

@timecost
def now_datetime(format):
    now = int(time.time())
    print(time.strftime(format, time.localtime(now)))

now_datetime("%H:%M:%S")

# Call now_datetime() Before [2018-01-15 00:24:17]
# 00:24:17
# Call now_datetime() After [2018-01-15 00:24:17]
# Run Cost Time 0s
# 在方法前后加入自己想要的内容, 哈哈, 这就是传说中的aop吗?

--结束END--

本文标题: Python入门学习(六)

本文链接: https://www.lsjlt.com/news/192265.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python入门学习(六)
    在熟悉了Python中常用的一些内置函数, 那接下来我们定义一个自己的函数吧 def add(x, y): return x + y 函数 函数语法 def functonname(parameters): ... ...
    99+
    2023-01-31
    入门 Python
  • Oracle入门学习六
    事务:把一组操作看做一个工作单元,要么都执行,要么都不执行。dml操作才有事务,查询没有事务。 开始事务:从上一次的事务结束之后,从第一次dml操作,就自动开启了事务 提交事务:commit 回滚事务:rollback cr...
    99+
    2021-12-10
    Oracle入门学习六
  • Python机器学习入门(六)之Python优化模型
    目录1.集成算法1.1袋装算法1.1.1袋装决策树1.1.2随机森林1.1.3极端随机树1.2提升算法1.2.1AdaBoost1.2.2随机梯度提升1.3投票算法2.算法调参2.1...
    99+
    2022-11-12
  • 从零学习node.js之express入门(六)
    一、 介绍 什么是express,为什么要使用express?根据官方网站的说法,express是一个基于 Node.js 平台的极简、灵活的web应用开发框架,它提供一系列强大的特性、丰富的API接口,对...
    99+
    2022-06-04
    入门 node js
  • python入门学习
    首先在官网下载好python3.6及以上的版本,根据自己的系统选择:没有显示64位的就是32位的安装包,选择蓝线的能够直接打开 在控制台输入python,配置成功的图片如下: 从IDLE打开python输入指令 print("I lo...
    99+
    2023-01-31
    入门 python
  • Python 入门学习笔记
    1 安装Anaconda和jupyter notebook   之前没有听说过这两个名词,然后看完介绍,按照我自己的理解,Anaconda是一个集合很多环境和模块的存储地方。 Jupyter notebook 就是一个可以在此环境里打代码...
    99+
    2023-01-30
    学习笔记 入门 Python
  • Python入门学习路线
    Python技术路径中包含入门知识、Python基础、Web框架、基础项目、网络编程、数据与计算、综合项目七个模块。路径中的教程将带你逐步深入,学会如何使用 Python 实现一个博客,桌面词典,微信机器人或网络安全软件等。完成本路径的基...
    99+
    2023-01-30
    入门 路线 Python
  • Python入门学习之operator-
    本模块主要包括一些Python内部操作符对应的函数。这些函数主要分为几类:对象比较、逻辑比较、算术运算和序列操作。 操作  语法 函数 相加 a + b  add(a, b) 字符串拼接 ...
    99+
    2023-01-31
    入门 Python operator
  • Python基础学习入门
    Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。在命令行窗口输入"python" 命令来查看本地是否已经安装Python以及Python的安装版本Python下载Python官网:http://www...
    99+
    2023-06-02
  • Python入门难吗?如何顺利入门Python学习?
    很多人想要抓住人工智能的红利,转行Python,首要的问题就是:Python入门难吗在回答这个问题之前,我们需要了解一下Python是什么Python是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常...
    99+
    2023-06-02
  • python入门之算法学习
    前言 参考学习书籍:《算法图解》[美]Aditya Bhargava,袁国忠(译)北京人民邮电出版社,2017 二分查找 binary_search 实现二分查找的python代码...
    99+
    2022-11-12
  • Python多线程入门学习
    Python 中使用线程有两种方式:函数或者用类来包装线程对象。 函数式: 调用 thread 模块中的start_new_thread()函数来产生新线程。 语法如下: thr...
    99+
    2022-11-12
  • Python深度学习 深度学习入门基于
    《Python深度学习》由Keras之父、现任Google人工智能研究员的弗朗索瓦•肖莱(François Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,涉及计算机视觉、自然语言处理、生成式模型等应用。书...
    99+
    2023-01-31
    深度 入门 Python
  • Python3学习(十六):python
    如果你需要遍历数字序列,可以使用内置range()函数。它会生成数列。range()语法:range(start,end,step=1):顾头不顾尾正序遍历:range(10):默认step=1,start=0,生成可迭代对象,包含[0,...
    99+
    2023-01-31
    十六 python
  • MySQL入门学习
    ...
    99+
    2015-02-25
    MySQL入门学习
  • Node.js学习入门
    开始之前,安利一本正在看的书《站在两个世界的边缘》,作者程浩,上帝丢给他太多理想,却忘了给他完成理想的时间。OK,有兴趣的可以看一看。 node.js如标题一样,我也是刚开始接触,大家一起学习,有不当的地方...
    99+
    2022-06-04
    入门 Node js
  • Day1 Python入门学习,第一周
    体会 第一次开始学习Python,不知道自己之后能否持续坚持下去。我想不论怎样只要有时间和就努力坚持。争取以周为单位按要求完成相应工作量的学习。持续学习,不断总结和进步。 一、Python安装   Python的安装是还是是一件比较麻烦的...
    99+
    2023-01-30
    第一周 入门 Python
  • Python画图学习入门教程
    本文实例讲述了Python画图的基本方法。分享给大家供大家参考,具体如下: Python:使用matplotlib绘制图表 python绘制图表的方法,有个强大的类库matplotlib,可以制作出高质量的...
    99+
    2022-06-04
    画图 入门教程 Python
  • python入门学习笔记分享
    一、python的基础语法 1.行连接的方法是最后加上一个‘\' 2.注释:多行注释三引号,#行注释;三引号定义的字符串原样输出(保存原格式) 3.I/O语句:用逗号分隔零个或多个表...
    99+
    2022-11-12
  • python入门学习之变量篇
    【前言】在公司内部wiki上看到一个不错的学习网站,遂开始了我这慢悠悠的学习之旅。网站链接:https://www.codecademy.com1.理解布尔值一种数据类型。简单来说,正如你家里的电灯有开关两种状态一样,布尔值同样也有两个值,...
    99+
    2023-01-31
    变量 入门 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作