Python-自定义函数

自定义函数及调用

创建一个专门存放自定义函数的文件夹 D:\python\customize

构建一个简单的函数

def greet_user():          # 关键词 def 开头,后接定义的函数名,括号必不可少,最后以冒号结尾 
    '''显示简单的问候语'''    # 注释用三个引号括起
    print('Hello!')        # 单引号双引号都可以

将函数保存到 customize 文件夹中,命名为greet.py

image-20211114002034335

调用自定义的函数

import sys
sys.path.append(r"D:\python\customize") # 设置自定义的路径
import greet                            # 调用自定义函数greet.py的文件名
greet.greet_user()                      # 调用函数方式
image-20211114002711631

参数的位置

函数调用要根据定义时参数变量的位置

def difference(x,y):
    diff = x - y
    print(diff)  # diff作为一个变量不用加双引号,加了双引号就会打印diff而不会打印计算的结果
    
difference(3,5)
difference(5,3)
image-20211115230334912

根据关键词调用可不按照位置来

def difference(x,y):
    diff = x - y
    print(diff)
    
difference(y=3,x=5)
image-20211115230716208

默认值

使用默认值时,先列出没有默认值的参数。再列出有默认值的参数

def difference(x,y=2):
    diff = x-y
    print(diff)
    
difference(5)
difference(5,3)
image-20211115231831534

参数可选

def difference(x,y,z=''):
    if z:                 # z 存在的时候
        diff = x-y+z
    else:
        diff = x+y
    print(diff)
    
difference(5,3)
difference(5,3,1)
image-20211117233949080

返回值

在函数中,可使用 return 语句将值返回到调用函数的代码行。返回值让你能够将程序的大部分繁重工作移到函数中去完成,从而简化主程序

def difference(x,y):
    diff = x-y
    return diff
    
z = difference(3,5)
print(z)
image-20211125170042675

函数与列表

传递列表

def greet_users(names):
    for name in names:
        msg = "Hello, " + name.title() + "!" # title返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写
        print(msg)

usernames = ['hannah', 'ty', 'margot']
greet_users(usernames)
image-20211124130856413

修改列表

def print_objects(unprinted_objects, completed_objects):                 
    while unprinted_objects:                     # 当unprinted_objects列表有值的时候执行下列指令
        current = unprinted_objects.pop()        # 删除unprinted_objects的最后一个元素并将该元素赋值给current
        print("Printing object: " + current)     #打印删除的元素
        completed_objects.append(current)        # 在completed_objects列表末尾添加current
def show_completed(completed_objects):
    print("\nThe following objects have been printed:")
    for completed_object in completed_objects:
        print(completed_object)
        
unprinted_objects = ["A","b","C"]
completed_objects = []

print_objects(unprinted_objects, completed_objects)
show_completed(completed_objects)
image-20211124142415746

禁止修改列表

上述修改是在unprinted_objects列表里面直接删除,执行完函数之后,该列表没有元素变为空列表,向函数传递列表的副本可避免这个问题。unprinted_objects[:]即为unprinted_objects的副本

调用上述函数时可以用

print_objects(unprinted_objects[:], completed_objects)

任意数量的实参

传递任意数量的实参

当不知道函数需要传递多少个实参的时候,可以用*加形参来表示

如下,*words表示创建一个名为words的空元组

def print_words(*words):
    print(words)
    
print_words('a')
print_words('apple','grape')
image-20211125144031631

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

def print_words(type,*examples):
    print('type: '+type)
    for example in examples:
        print(example)
        
print_words('n','noun','group')
print_words('v','ask','do','can')   
image-20211125145850915

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

**加形参创建一个字典以使函数接受任意的键值对

def user_profile(name,nation,**user_info):
    profile = {}
    profile['name'] = name
    profile['nationality'] = nation
    for key,value in user_info.items():
        profile[key] = value
    return profile
    
user = user_profile('Jenny','America',gender='woman',age=25)
print(user)
image-20211125154628391

将函数存储在模块中

模块是扩展名为.py的文件,包含要导入到程序中的代码。

D:\python_test目录下创建一个存放长方形周长和面积计算公式的py文件,内容如下,记为rectangle_functions.py,该文件即为一个模块

def rectangle_C(a,b):
    c=(a+b)*2
    return c
    
def rectangle_S(a,b):
    s=a*b
    return s

导入整个模块

rectangle_functions.py所在的目录中创建另一个名为rectangle.py的文件,内容如下

import rectangle_functions

C=rectangle_functions.rectangle_C(4,5)
S=rectangle_functions.rectangle_S(4,5)
print('长度为4,宽度为5的长方形')
print('周长为'+str(C)+',面积为'+str(S))
image-20211125164432732

调用rectangle

import sys
sys.path.append(r"D:\python_test") 
import rectangle                           
image-20211125171040461
# 导入特定的的函数
from rectangle_functions import rectangle_C

# 导入全部函数
from rectangle_functions import *

使用 as 指定别名

如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短而独一无二的别名

# 使用 as 给模块指定别名
import rectangle_functions as rf
# 调用方式
C=rf.rectangle_C(4,5)

# 使用 as 给函数指定别名
from rectangle_functions import rectangle_C as c
# 调用方式
C=c(4,5)

参考书目:Python编程从入门到实践 - Eric Matthes 著,袁国忠 译

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • 本文为《爬着学Python》系列第十篇文章。 在实际操作中,可能函数是我们几乎唯一的实现操作的方式,这是因为函数能...
    SyPy阅读 5,430评论 0 8
  • 3.5 传递任意数量的实参 当不知道函数需要接受多少个实参时,可以通过星号加一个空元组名来实现。 实例:一个制作比...
    妞妞她爸阅读 604评论 0 0
  • 3.3 返回值 函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值。在函数中,可使用retur...
    妞妞她爸阅读 346评论 0 0
  • 3. 函数 函数是带名字的代码块,用于完成具体的工作。需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的...
    妞妞她爸阅读 244评论 0 0
  • 函数 定义函数 使用关键字def来告诉Python你要定义一个 函数。这是函数定义,向Python指出了函数名,还...
    yushui1995阅读 469评论 0 0