Python小白入门:关于函数的超详解知识点总结(定义、传递参数、返回值、模块等)

news2024/12/28 21:11:59

本文目录

  • 一、定义函数
  • 二、传递实参
    • 2.1 位置实参
    • 2.2 关键字参数
    • 2.3 默认值
    • 练习题
      • 代码
      • 输出
  • 三、返回值
    • 3.1 返回简单值
    • 3.2 可选实参
    • 3.3 返回字典
    • 3.4 在函数中使用while循环
    • 练习题
      • 代码
      • 输出
  • 四、传递列表
    • 4.1 在函数中修改列表
    • 4.2 禁止函数修改列表
    • 练习题
      • 代码
      • 输出
  • 五、传递任意数量的实参
    • 5.1 位置实参和任意数量实参的结合使用
    • 5.2 使用任意数量的关键字实参
    • 练习题
      • 代码
      • 输出
  • 六、将函数存储在模块中
    • 6.1 导入整个模块文件
    • 6.2 导入模块中的特定函数
    • 6.3 使用as给函数指定别名
    • 6.4 使用as给模块指定别名
    • 6.5 导入模块中的所有函数

一、定义函数

使用def关键字定义函数。

def 函数名():

def great_user(username):
    print(f"{username.title()},hello!")

great_user("jessi")

在这里插入图片描述

实参和形参

  • 实参(argument):在代码greet_user(‘jesse’) 中,值’jesse’ 是一个实参 ,即调用函数时传递给函数的信息。
  • 形参(parameter):在函数greet_user() 的定义中,变量username 是一个形参 ,即函数完成工作所需的信息。

调用函数时,将要让函数使用的信息放在圆括号内。在greet_user(‘jesse’) 中,将实参’jesse’ 传递给了函数greet_user() ,这个值被赋给了形参username。

二、传递实参

2.1 位置实参

调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式称为位置实参

def describie_pet(animal_type,pet_name):
    print(f"I have a {animal_type}.")
    print(f"My {animal_type}'s name is {pet_name.title()}")

describie_pet('hamster','harry')
describie_pet('dog','willie')

在这里插入图片描述

使用位置实参来调用函数时,实参的顺序必须正确。

2.2 关键字参数

关键字实参是传递给函数的名称值对,此时无需关注顺序。

  • 使用关键字参数时必须要准确指定函数定义中的形参名。
def describie_pet(animal_type,pet_name):
    print(f"I have a {animal_type}.")
    print(f"My {animal_type}'s name is {pet_name.title()}")

describie_pet(animal_type='hamster',pet_name='harry')
describie_pet(pet_name='willie',animal_type='dog')

在这里插入图片描述

2.3 默认值

编写函数时,可给每个形参指定默认值。

  • 在调用函数中给形参提供了实参时,Python将使用指定的实参值;
  • 否则,将使用形参的默认值。
def describie_pet(animal_type,pet_name='winnie'):
    print(f"I have a {animal_type}.")
    print(f"My {animal_type}'s name is {pet_name.title()}")

describie_pet(animal_type='hamster',pet_name='harry')
describie_pet('dog')

在这里插入图片描述

练习题

在这里插入图片描述

代码

def make_shirt(size,text):
    print(f"The shirt's size is {size} and the text will be printed on it is {text.title()}")

def make_shirt_default(size='XL',text = 'I love Python'):
    print(f"The shirt's size is {size} and the text will be printed on it is {text.title()}")

    
print('8-3')
make_shirt('M','make everyday counts')
make_shirt(size='L',text='time is money')

print('8-4')
make_shirt_default()
make_shirt_default(size='M')
make_shirt_default(text='I am the best')

输出

在这里插入图片描述

三、返回值

3.1 返回简单值

在定义函数时使用return关键字返回函数结果,在使用函数时使用一个变量接收函数的返回结果。

def get_name(first_name,last_name):
    full_name = f"{first_name} {last_name}"
    return full_name.title()

musician = get_name('jimi','ma')
print(musician)

在这里插入图片描述

3.2 可选实参

给形参一个默认的空值,然后再函数中使用条件语句,让当用户使用该形参和不适用该形参时函数都可以使用。

  • 可选值让函数能够处理各种不同的情形,同时确保函数调用尽可能简单。
def get_formatted_name(first_name,last_name,middle_name=""):
    if middle_name:
        full_name = f"{first_name} {middle_name} {last_name}"
    else:
        full_name = f"{first_name} {last_name}"
    return full_name.title()

musician = get_formatted_name('jimi','ma')
print(musician)
musician_1 = get_formatted_name('will','hooker','lee')
print(musician_1)

在这里插入图片描述

3.3 返回字典

函数可以返回列表、字典等复杂数据类型。

def build_person(first_name,last_name,age=None):
    person = {'first_name':first_name,'last_name':last_name}
    if age:
        person['age'] = age
    return person

musician = build_person('jimi','hendrix',27)
print(musician)
  • 代码中age为一个可选的形参,设置值为None,为占位符。

在这里插入图片描述

None值用法:none值详解

  • 在条件测试中,None值相当于False
  • None是一个空值,空值是Python里的一个特殊值,用None表示。可以将None赋值给任何变量
  • None是一个特殊的空对象,可以用来占位
  • None不等于空字符串、空列表、0,也不等同于False

3.4 在函数中使用while循环

def get_formatted_name(first_name, last_name):
    full_name = f"{first_name} {last_name}"
    return full_name.title()

while True:
    print("\nPlease tell me your name")
    print("(enter 'q' at any time to quit)")

    f_name = input("First name: ")
    if f_name == 'q':
        break
    l_name = input("Last name: ")
    if l_name == 'q':
        break

    format_name = get_formatted_name(f_name,l_name)
    print(f"Hello, {format_name}!")

在这里插入图片描述

练习题

代码

在这里插入图片描述

def city_country(city,country):
    return f"{city.title()},{country.title()}"


def make_album(name,singer,num_songs = None):
    album = {'name':name,'singer':singer}
    if num_songs:
        album['number of songs'] = num_songs
    return album

print('8-6')
print(city_country('zibo','china'))
print(city_country('florence','italy'))
print(city_country('madrid','spain'))

print('8-7')
print(make_album('love and peace','jack',5))
print(make_album('nature','diane'))

print('8-8')
while True:
    print("Enter the singer and album's name(enter q to exit)")
    singer = input("Enter the singer: ")
    if singer == 'q':
        break
    name = input("Enter the album name: ")
    if name == 'q':
        break
    album = make_album(name,singer)
    print(f"The album's name is {album['name'].title()} and the singer is {album['singer'].title()}")

输出

在这里插入图片描述

四、传递列表

将列表作为参数在函数中进行传递。

def greet_users(names):
    for name in names:
        print(f"Hello,{name.title()}!")

username = ['hannah','will','grace']
greet_users(username)

4.1 在函数中修改列表

在函数中完成列表的修改,并且专门定义一个函数完成列表元素的输出。

def print_models(unprinted_models, completed_models):
    while unprinted_models:
        current_design = unprinted_models.pop()
        print(f"Printing model: {current_design}")
        completed_models.append(current_design)

def show(completed_models):
    print('The following models have been printed:')
    for completed_model in completed_models:
        print(completed_model)

unprinted_models = ['phone case','robot pendant','dodecahedron']
completed_models = []
print_models(unprinted_models,completed_models)
show(completed_models)

在这里插入图片描述

4.2 禁止函数修改列表

如果不想让函数修改列表中的内容,可以向函数中传递列表的副本,这样做可以只对列表副本进行修改,但是原列表内容不会受影响。

创建列表副本:

如何拷贝列表

  1. 切片法:list1 = list0 [ : ]
  2. 使用copy函数:list1 = list0.copy()
  3. 使用list函数:list1 = list(list0)
def print_models(unprinted_models, completed_models):
    while unprinted_models:
        current_design = unprinted_models.pop()
        print(f"Printing model: {current_design}")
        completed_models.append(current_design)

def show(completed_models):
    print('The following models have been printed:')
    if completed_models==[]:
        print("This list is empty")
    else:
        for completed_model in completed_models:
            print(completed_model)

unprinted_models = ['phone case','robot pendant','dodecahedron']
completed_models = []
print_models(unprinted_models[:],completed_models)
show(unprinted_models)
show(completed_models)

可以看到由于使用了unprinted_models列表的副本,所以其元素没有被改变。

在这里插入图片描述

练习题

在这里插入图片描述

代码

def show_message(text):
    for t in text:
        print(f"{t.title()}")

def send_message(text1,text2):
    while text1:
        t = text1.pop()
        print(f"{t.title()}")
        text2.append(t)

def print_list(list1):
    if list1 == []:
        print("This is an empty list.")
    else:
        for l in list1:
            print(f"{l.title()}")

print('8-9')
text = ['hello','good morning','goodbye','thank you']
show_message(text)

print('8-10')
text1 = ['hello','good morning','goodbye','thank you']
text2=[]
send_message(text1,text2)
print_list(text1)
print_list(text2)

print('8-11')
text1 = ['hello','good morning','goodbye','thank you']
text2=[]
send_message(text1[:],text2)
print_list(text1)
print_list(text2)

输出

在这里插入图片描述

五、传递任意数量的实参

  • 适用情况:当函数不知道要接收多少个实参值时

形参前面加一个星号*代表让Python创建一个名为该形参的空元组,并将函数收到的所有值都封装进该元组中。

此时可以让函数收集任意数量个实参。

def method(*value)

下面的代码将打印不同类型的披萨,因为不知道有几种披萨需要制作,因此将不同的topping设置为未知量,在调用函数时可以添加未知个数的披萨toppings,这些toppings会被存储在一个元组中。

def make_pizza(*toppings):
    print("\nMaking a pizza with the following toppings:")
    for topping in toppings:
        print(f"{topping.title()}")

make_pizza('pepperroni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')

在这里插入图片描述

5.1 位置实参和任意数量实参的结合使用

  1. 如果要让函数接受不同类型的实参,需要将接纳任意数量实参的形参放在最后
  2. Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参元组中

存储格式如下所示:

在这里插入图片描述

def make_pizza(size,*toppings):
    print(f"\nMaking a {size}-inch pizza with the following toppings:")
    for topping in toppings:
        print(f"{topping.title()}")

make_pizza(12,'pepperroni')
make_pizza(16,'mushrooms', 'green peppers', 'extra cheese')

在这里插入图片描述

5.2 使用任意数量的关键字实参

让函数接收任意键值对:使用双星号**形参名代表让Python创建一个名为该形参名的空字典,并将收到的所有键值对放进该字典中。

def method ( arg1, arg2, **info )

在这里插入图片描述

Python将为函数创建一个名为info的字典,并将所有的键值对都存储进去。

def build_profile(first_name,last_name,**user_info):
    user_info['first_name'] = first_name
    user_info['last_name'] = last_name
    return  user_info
user_profile = build_profile('amy','ma',city = 'zibo',age = 28,major='computer and science')
print(user_profile)

对上述代码进行debug,可以看到创建的字典中包含了5个键值对,可以看到字典中的键值对顺序是先定义函数中自己输入的键值对,然后才是函数中定义的形参。

在这里插入图片描述

输出如下所示。

在这里插入图片描述

练习题

在这里插入图片描述

代码

def make_pizza(*toppings):
    for topping in toppings:
        print(f"The pizza is made of {topping.title()}")

def build_profile(f_name,l_name,**info):
    info['first name'] = f_name
    info['last name'] = l_name
    return info

def make_car(maker,type,**info):
    info['maker'] = maker
    info['type'] = y=type
    return info


print('8-12')
make_pizza('1')
make_pizza('2','3')
make_pizza('34')

print('8-13')
my_profile = build_profile('weiyi','ma',city = 'zibo',major = 'cs', university = 'SHU')
for k,v in my_profile.items():
    print(f"My {k.title()} is {v.title()}")

print('8-14')
car = make_car('subaru', 'outback', color='blue', tow_package=True)
print(car)

输出

在这里插入图片描述

六、将函数存储在模块中

可以将函数存储在称为模块的独立文件中,再将模块导入(import)到主程序中。

  • import 语句允许在当前运行的程序文件中使用模块中的代码。

6.1 导入整个模块文件

语法: import 模块名

1. 创建模块:pizza.py为一个包含make_pizza函数的文件。

在这里插入图片描述

2. 调用该模块:在main.py中调用make_pizza模块。

语法:module_name.function_name()

  • Python读取这个文件时,使用import pizza 让Python打开文件pizza.py。
  • 要调用被导入模块中的函数,使用导入模块的名称pizza.函数名make_pizza() 的形式进行调用

在这里插入图片描述

6.2 导入模块中的特定函数

语法: from module_name import function_name

用逗号分隔函数名:从模块中导入任意数量的函数:

语法:from module_name import function_0, function_1, function_2

from pizza import make_pizza
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

6.3 使用as给函数指定别名

函数名太长时可以使用as关键字为其起一个别名。

语法:from module_name import function_name as fn

from pizza import make_pizza as mp

mp(16, 'pepperoni')
mp(12, 'mushrooms', 'green peppers', 'extra cheese')

6.4 使用as给模块指定别名

语法:import module_name as mn

import pizza as p
p.make_pizza(16, 'pepperoni')
p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

6.5 导入模块中的所有函数

语法:from module_name import *

from pizza import *
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/851731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】常用的文本处理命令详解 + 实例 [⭐实操常用,建议收藏!!⭐]

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

【雕爷学编程】Arduino动手做(195)---HT16k33 矩阵 8*8点阵屏模块6

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

Positive证书是什么?

Positive SSL是全球著名CA Sectigo的子品牌, 也是目前全球签发量最高的商业SSL证书。价格低,安全性高,在个人网站和中小型企业网站中拥有极高的占有率。 Positive SSL证书包括DV SSL, EV SSL,也是唯一支持IP地址加密的…

Scratch 之 TurboWarp 常用插件介绍-1

今天带来2篇 TurboWarp 常用插件介绍。 什么你还没有 TurboWarp ?快去下载一个吧 TurboWarp(简称TW) 在线版 | 离线版下载 TurboWarp优点 编译速度快于原版 Scratch 至少10倍拥有自定义帧的功能(比如60 FPS)造型编…

【ppt技巧】PPT限制修改的两种方法

PPT文件制作完成之后,保护PPT文件样式以及内容,很重要,防止生成的模板不被修改也很重要。今天分享两种限制修改PPT文件的方法。 方法一: 想要PPT文件中添加的logo、页脚、标题样式等不被改变,可以将所有设置在幻灯片…

无需公网-用zerotier异地组网

无需公网-用zerotier异地组网 在前面的文章中我们讲到利用frp进行内网穿透,但是他的局限在于你需要一台公网服务器。并且对公网服务器的带宽有一定的要求。因此这里我们推荐一款异地组网工具搭建属于自己的虚拟网络,经过授权连接成功之后彼此都在同一网…

8个电商值得关注的3D模型利用技巧

赛车、咖啡机、能量饮料、餐椅、野营炊具、曲棍球棒、钻戒,甚至风火轮玩具车。 你可以在 Shopify 商店中找到它们,现在借助文件标准和 Web 渲染的最新进展,你可以在自己的笔记本电脑屏幕上以 3D 模型的形式看到这些精确的产品。 更重要的是&a…

apache poi合并单元格 横向竖向合并单元格

合并单元格是常见的需求,apache POI的合并单元格的原理很简单,它就是从左上到右下的单元格会被左上合并,无论是横向合适纵向合并单元格合并,都是这个原理,关键的api方法 org.apache.poi.hssf.model.InternalSheet#add…

分布式链路追踪之SkyWalking详解和实战

SkyWalking 文章目录 SkyWalking1.SkyWalking概述2.SkyWalking架构设计3.SkyWalking部署4.应用程序接入SkyWalking5.SkyWalking配置应用告警5.1.告警规则5.2.Webhook(网络钩子)5.3.邮件告警实践 6.项目自动化部署接入SkyWalking6.1 整体思路6.2 启动参数…

Python web实战之细说Django的中间件

🔑 关键词:Python Web 开发、Django、中间件 今天分享Python Web开发中的一个重要成员:Django的中间件。介绍中间件的概念、作用及其在实战中的应用。 1 什么是中间件 在Python Web开发中,中间件(Middleware&#xff…

【FAQ】视频监控EasyCVR平台登录密码忘记?如何通过navicat连接数据库进行修改?

TSINGSEE青犀视频监控管理平台EasyCVR可以根据不同的应用场景需求,让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上,平台可实现视频实时直播、云端录像、云存储、回放与检索、告警上报、视频快照、…

企业智能制造成熟度报告

《“十四五”智能制造发展规划》明确提出,到2025年,70%的规模以上制造业企业基本实现数字化网络化,智能制造能力成熟度水平明显提升,并指出要建立长效评价机制,鼓励第三方机构开展智能制造能力成熟度评估,研…

LLVM笔记2 Intermediate Representation (IR)

参考链接:https://llvm.org/devmtg/2019-04/slides/Tutorial-Bridgers-LLVM_IR_tutorial.pdf https://zhuanlan.zhihu.com/p/163063995 https://zhuanlan.zhihu.com/p/163328574 文章目录 IR的布局1. IR语法2.IR递归函数3.使用迭代的方式4.全局变量5.LLVM’s type s…

STM32U5系列芯片,不支持ST-LINK v2怎么办

方案一 淘宝 唐卡思 购买stlink V3 (万能的淘宝) 方案二 使用jlink KEIL版本V5.34以上 支持M33编译 工程的分扇加载SCT件需要修改

LDAP协议

目录 LDAP是什么?什么是目录服务?什么是LDAP认证? 为什么要用LDAP?LDAP能做什么?为什么用LDAP做身份验证?LDAP的产品&实现 LDAP基本模型目录树&名词解释分布式 LDAP的操作 LDAP是什么? …

Elasticsearch:升级 Elasticsearch 最安全的方法

关于升级自己的 Elasticsearch 集群有很多种办法。很多涉及到滚动升级或需要重启集群。这是一个比较复杂的过程。一般来说,有两种可能发生的情况: 滚动升级(无停机时间)整个集群重新启动(一些停机时间) 如…

【Sa-Token】9、Sa-Token实现在线用户管理功能

尽管框架将大部分操作提供了简易的封装,但在一些特殊场景下,我们仍需要绕过框架,直达数据底层进行一些操作。 1、官方文档 会话查询 https://sa-token.cc/doc.html#/up/search-sessionSa-Token提供以下API助你直接操作会话列表&#xff1a…

电脑选购:6000元左右买到性价比超高的笔记本电脑,准大学生的购机指南

目录 一、ThinkBook 14 二、华硕灵耀14 2023 四、宏碁掠夺者擎Neo 五、惠普(HP)暗影精灵9 六、联想拯救者R7000P 2023 每年高考毕业季,许多即将进入大学的毕业生都会面临新电脑的选择,而对于喜欢玩游戏的同学,一般…

1分钟快速将智能聊天机器人接入国产ChatGLM开源模型

“ 了解如何在短短1分钟内,让智能聊天机器人与国产ChatGLM开源模型无缝连接,为你的应用增添智能交流能力!” 01 — 昨天发布ChatGPT微信助手体验群后,见《ChatGPT 微信助手上线!问答更便捷,功能持续升级中。…