栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python编程:从入门到实践 第三章--函数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python编程:从入门到实践 第三章--函数

Python编程:从入门到实践 第三章—函数 语法

就还是需要先记一下函数定义的语法:

def Test(num):
    num = 12

如上,def func_name(factors): # codes,除了不用声明返回值类型,和定义前加了个def没啥了,也没有什么先声明再定义的操作吧。。

一些基本的函数内容和C没啥区别,比如 默认参数(同样也是必须放最后)、指定值传参(就可以忽略传参时候的顺序)等。。

书上对于 指定值传参也就是
func(参数名 = 值) ,这种传参方式有名词的:关键字实参

传参问题

关于这个函数的传参问题,感觉应该是和C#的值类型和引用类型相似

  1. 传入一些简单的数据类型,比如字符串,整型等,就是值传递,函数内部只会改变形参的值,对实参没影响。
  2. 但是对于列表和字典等复杂的数据类型,就改变实参的值了。

暂且先这样浅显的理解吧,深入的话刚搜了一篇文章:
Python传参的问题

传递任意数量的参数

分为两种

  1. 接收任意数量参数 like:
def make_meal(size, *toppings):
    print('The',str(size)+'-inch big pizza was made of:n')
    for topping in toppings:
        print(topping)

   “这个 *toppings 中的*号是让Python创建一个名为toppings的空元组,并将收到的所有值都封装到这个元组中”

  1. 接收任意数量的 关键字实参(见前边备注。。)
def get_multifac(num: int, **user):
    info = {}
    info['number'] = num
    for key, value in user.items():
        info[key] = value
    return info
  # 调用
     user_infor = get_multifac(3, mission='getup', class='Math')

   “这个 **users 中的**号是让Python创建一个名为users的空字典,并将收到的所有 键-值对 都封装到这个元组中”

第一次写这个调用的时候,发现 调用时候:
get_multifac(3, mission=‘getup’, course=‘Math’) 的
missioncourse总是报错,我一度以为我这个版本的python不支持这样调用呢。
搜了报错信息才发现:原来是之前函数体内的
for key, value in user 出错了, user既然是个字典,而且这个for循环是用了 key和value的,那应该是 user.items()啊,还是对遍历字典不够熟练导致的错误。。
我记得上一章书上有写 直接 for … in 字典名 是指的键,但这样写显然不如写为 for… in 字典名.keys() 更加明了。

由于这两种函数都是接收不确定数量的实参的,所以说 *factor 和 **factor 都得放到形参列表的最后一个。

函数存储在模块中

模块也就是.py的代码文件了,然后在模块里写的函数,可以再其他代码中import
比如我现在创建了一个PizzaMake.py 文件,代码为:

def prepare_work():
    print("preparing")

def make_pizza():
    print("making")

def finish():
    print("finish!")

有几种方式

  1. 直接引用整个模块
    import PizzaMake
    这种引用方式,调用函数时需要加上模块名,也就是
    模块名.函数名的形式调用
  2. 引用模块中的某些函数
    from PizzaMake import prepare_work, make_pizza, finish
    这种就不用加模块名直接调用函数就可以
  3. 引用模块的所有函数
    form PizzaMake import *
    这种方式不推荐,因为把一个模块中的所有函数都import,却不知道具体的函数名,很容易与当前代码中的其他函数名冲突,从而引起覆盖。

无论是import 模块还是模块中的函数都可以重命名的:
import PizzaMake as p
from PizzaMake import make_pizza as mp, prepare_work as pw

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303291.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号