热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

子函数的定义

#定义一个子函数,格式是:#def函数名(参数1,参数2,'''):这里有一个冒号不要忘记#接下来定义一个没有参数的子函数printHellodefprin

#定义一个子函数,格式是:
#
def 函数名(参数1,参数2,‘‘‘): 这里有一个冒号不要忘记
#
接下来定义一个没有参数的子函数printHello
def printHello() :
print("Hello world")
#直接调用函数
printHello()


#定义一个有参数的函数
def printAnimal(animalType,animaName):
print("My animal is "+animalType.title()+" ans name is "+animaName.title())
printAnimal(
"hamster","rourou")

上边的函数参入实参和传入的位置有关系,接下来使用关键字实参就不应考虑传入参数的位置了


#参入参数和位置没有关系
def printAnimal(animalType,animaName):
print("My animal is "+animalType.title()+" ans name is "+animaName.title())
printAnimal(animaName
= "rourou",animalType = "hamster")

 


#并非传入所有的形参
def printName(firstName,midName,lastName):
if midName:
print("我有中间名字")
fullName
= firstName + " " + midName + " " + lastName;
else:
print("我没有中间名字")
fullName
= firstName + " " + lastName;
return fullName
firstName
= input("输入你的第一个名字:")
midName
= input("输入你的中间名字:")
lastName
= input("输入你最后的名字:")
print(printName(firstName,midName,lastName))
#1.
#
输入你的第一个名字:a
#
输入你的中间名字:v
#
输入你最后的名字:s
#
我有中间名字
#
a v s
#
2.
#
输入你的第一个名字:a
#
输入你的中间名字:
#
输入你最后的名字:b
#
我没有中间名字
#
a b

 


#一个函数可以返回任何值,包括复杂的字典和列表
def getInfo(name,address,age=‘‘):
fullName
= {
name: name,
address: address,
}
if age:
fullName[
age] = age
return fullName
info
= getInfo(小怪,北京,age=24)
print(info) #{‘name‘: ‘小怪‘, ‘address‘: ‘北京‘, ‘age‘: 24}
info = getInfo(小怪,北京) #{‘name‘: ‘小怪‘, ‘address‘: ‘北京‘}
print(info)


#可以向函数传递列表
def getUsers(userLst):
for user in userLst:
print(Hello +user.title())
lst
= [xiaoguai,daguai,wangqiang]
getUsers(lst)
# Hello Xiaoguai
#
Hello Daguai
#
Hello Wangqiang


#实现两个列表的传值和打印
def transmitValue(lst1,lst2):
while lst1 :
value
= lst1.pop()
lst2.append(value)
def printLst(lst1):
for value in lst1:
print(value,end=" ")
print()
lst1
= [abc,bcd,cde,def,efg]
lst2
= []
transmitValue(lst1,lst2)
printLst(lst2)
#efg def cde bcd abc 上述的lst1会变成空列表


#我们只是希望去把lst1的内容传递到lst2中,并不希望去改变lst1的内容,我们可以这么做
def transmitValue(lst1,lst2):
while lst1:
value
= lst1.pop()
lst2.append(value)
def printLst(lst1):
for value in lst1:
print(value,end=" ")
lst1
= [abc,bcd,cde,def,efg]
lst2
= []
transmitValue(lst1[:],lst2)
#这里我们只是传入了一个lst1的副本,所以这样就乐意保护真实的lst1不会变成空表
printLst(lst1) #abc bcd cde def efg
print()
printLst(lst2)
#efg def cde bcd abc

*elelment中的*是创建一个名字为element的空元组,并把所有的值都分装在这个元组中


def printValue(*element):
for value in element:
print(-+value.title())
print(abc,bcd,cde,def) #abc bcd cde def
print(abc,@@@,sdef) #abc @@@ sdef


#使用任意数量的关键字实参
#
**userInfo编译器会自动创建一个空字典,字典名字是userInfo
def build_profile(first,last,**userInfo):
profile
= {}
profile[
firstName] = first
profile[
lastName] = last
for key,value in userInfo.items():
profile[key]
= value
return profile
first
= input("输入你的第一个姓名:")
last
= input("输入你的最后的姓名")
address
= input("输入你的地址")
age
= input(输入你的年龄)
userInfoList
= build_profile(first,last,address=address,age=age)#{‘firstName‘: ‘xiaoguai‘, ‘lastName‘: ‘daguai‘, ‘address‘: ‘北京‘, ‘age‘: ‘24‘}
print(userInfoList)

将函数存储在称为模块的独立文件中,再把模块导入主程序中,import语句就是允许在当前运行的文件中使用模块中的代码,通过函数存储在独立文件中,可隐藏代码的细节,把重点放在高层逻辑上,还可以和其他程序员分享这些文件而不是整个代码,相当于C/C++的头文件。要让函数是可导入的,得先创造模板,模板是扩展名为.py的文件,例如:

在template.py中定义如下的函数:


#模板文件
def makePizza(size,*toppings):
print(Make a + str(size)+-inch Pizza with follow toppings: )
for topping in toppings:
print(- + topping)

在主函数中(另外一个.py的文件中):注意关键词import,和template.一个函数,这个函数是在template.py中的,这时候会将所有的template.py内的函数都复制过来

但是你并看不到复制过来的代码。语法:import 模板名


import template
template.makePizza(
16,pepperoin,green peppers)
template.makePizza(
12,mushroom,extra cheese)
# Make a 16-inch Pizza with follow toppings:
#
- pepperoin
#
- green peppers
#
Make a 12-inch Pizza with follow toppings:
#
- mushroom
#
- extra cheese

但是有时候我们不需要全部导入,只需要导入部分模板中的函数,就需要用一下的定义方式:

from 模板名 import 函数1,函数2,函数3.......


#模板文件template.py
def makePizza(size,*toppings):
print(Make a + str(size)+-inch Pizza with follow toppings: )
for topping in toppings:
print(- + topping)
def userInfoList(first,last,**personInfo):
person
= {}
person[
first] = first
person[
last] = last
for key,value in personInfo.items():
person[key]
= value
return person
#function2.py
from template import makePizza,userInfoList
makePizza(
12,pepperoin,green peppers)
userList
= userInfoList(xiaoguai,daguai,address=北京,age = 24)
print(userList)
# - pepperoin
#
- green peppers
#
{‘first‘: ‘xiaoguai‘, ‘last‘: ‘daguai‘, ‘address‘: ‘北京‘, ‘age‘: 24}

有时候模板里的函数和我们主函数内的函数重名或者模板函数天长了,我们可以给这个模板函数起一个别名,语法如下:

from 模板 import 函数名 as 别名


#template.py
def longNamelongName():
for i in range(1,10):
for j in range(1,i+1):
print(j,*,i,=,i*j,end="\t")
print()
#function2.py
from template import longNamelongName as nineList #给函数longNamelongName起了一个别名nineList
nineList()
# 1 * 1 = 1
#
1 * 2 = 2 2 * 2 = 4
#
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
#
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
#
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
#
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
#
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
#
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
#
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81

当如模板中的所有函数,使用*,例如:from template import *    这句代码就回吧模板tmeplate中的所有函数复制到主函数中,但是你任然看不到代码细节,

这就不用在使用点表示法来调用函数了,也就是不用这样了:template.function()。只需要直接写出函数名称就可以使用了,但是有一个问题就出现了,当我们写的函数和模板中的函数名称一样的话就会出现函数名覆盖的现象,结果也就是无法预测的,所以两种解决办法,第一种::我只要导入我需要调用的函数就行了;第二种:我使用点表示法,例如:template.function()

 

子函数的定义



推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
author-avatar
我-是二毛控控控_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有