Python中用函数实现代码的复用
# Python中用函数实现代码复用
"""
def funcname(paras):
statements
return [expression] 关于函数定义说明如下:
函数定义以def关键字开头,后接函数名称和圆括号()
paras是函数的参数,放在函数名后面圆括号()内,参数之间用逗号分隔
statemengts是函数体,函数体的前部可以选择性的使用字符串,用于说明函数功能
函数声明以冒号结束,函数体内需要缩进
return语句用于结束函数,将返回值传递给调用语句。不带表达式的return返回None值 说明:
如果函数的参数是多个,默认情况下,函数调用时,传入的参数和函数定义时参数定义的顺序是一致的,调用必须在定义之后 执行help(函数名)命令,将显示函数的说明信息
""" def hello():
print("Hello Python") def getarea(x, y):
'''
参数为两个数值数据,或者一个字符串和一个整数
'''
return x * y hello()
print(help(getarea))
print(getarea(2, 3)) def getcirclearea(r):
'''
参数为数值数据(圆的半径)
'''
print("圆的面积是:{:>8.2f}".format(3.14 * r * r))
return getcirclearea(3)
print(type(getcirclearea))
print(getcirclearea(3)) # return 语句无返回值,返回None # 函数的嵌套
'''
函数嵌套的定义:
函数嵌套的定义指的是在函数内部定义的函数,但内嵌的函数只能在该函数中使用
''' # 使用嵌套定义的函数求阶乘和
def sum(n):
def fact(a):
t = 1
for i in range(1, a + 1):
t *= i
return t s = 0
for i in range(1, n + 1):
s += fact(i)
return s # 函数的嵌套使用
def mai():
print("输入数据")
userinput()
print("处理数据")
userprocessing()
print("输出数据")
useroutput() def userinput():
pass def userprocessing():
pass def useroutput():
pass mai() '''
函数的参数和返回值
1.位置参数
函数调用时,默认情况下按照位置顺序传递给形参
2.赋值参数
如果参数很多,按位置传递参数的方式可读性较差,python提供了按照形参名输入实参的方式,这种参数称为赋值参数
3.参数值的类型
参数的类型是指函数调用时,传递的实际参数是基本数据类型还是组合数据类型。参数类型不同,在函数调用后,参数值的变化也是不同的。
基本数据的变量在函数体外,是全局变量,作为实际参数时,是将常量或者变量的值传递给形参,是一种值传递的过程,实参和形参是两个独立
不相关的变量,因此,实参值一般不会改变的。
''' def getvolume(r, h):
print("圆的体积是:{:>8.2f}".format(3.14 * r * r * h))
return v = getvolume(2, 5) def getscore(pe, eng, math, phy, chem):
return pe * 0.5 + eng * 1 + math * 1.2 + phy * 1 + chem * 1 print(getscore(60, 90, 70, 100, 80)) # 按位置传递
s = getscore(pe=60, math=70, chem=80, eng=90, phy=100) # 使用赋值参数
print(s) a = 10 def func(num):
num += 1
print("形参的地址:{}".format(id(num)))
print("形参的值:{}".format(num))
a = 1 # 局部变量,之在函数内部有效 func(a)
print(a, id(a)) # 函数调用后,变量a的值不发生变化 # 组合数据类型作为实参进行参数传递
tup = (1, 5, 7, 8, 12, 9)
ls = [] def getodd(tup1, ls1):
for i in tup1:
if i % 2:
ls1.append(i)
return ls1 getodd(tup, ls)
print(tup, ls) # 函数调用前后,ls的值放生了变化,但id值不变 # 默认参数
"""
定义函数时,可以给函数的形式参数设置默认值,这种参数称为默认参数。
当函数调用的时候,由于默认参数在定义是已经被赋值,所以可以直接忽略,
二其他参数势必需要传入的值。如果默认参数没有传入值,则直接使用默认值,
如果默认参数传入了值,则使用传入的新值替代。
""" def showmessage(name, age=18):
print("姓名:", name)
print("年龄:", age)
return # 调用shoumessage函数
showmessage(age=19, name='Kate')
print("-----------------------")
showmessage(name='John') # 可变参数
'''
在Python的函数中,可以定义可变参数。可变参数指的是在函数定义时,
该函数可以接受任意个数的参数,参数的个数可能是一个或者多个,也
可能是0个,可变参数有两种形式,参数名称前加星号(*)或者加两个
星号(**)。定义可变参数语法格式如下:
def funname(formal_args,*args,**kwargs)
statemengts
return expression
formal_args:定义的传统参数,代表一组参数
*args和**kwargs:可变参数
函数传入的参数个数会优先匹配formal_args参数的个数,
*args以元组的形势保存多余的参数,**kwargs以字典的形式
保存带有指定名称形式的参数,这种参数也成为关键字参数
调用函数的时候,如果传入的参数和formal_args参数的个数相同,
可变参数会返回空的元组或字典,如果传入的参数个数和formal_args
相同,可变参数会返回空元组或字典,如果传入的参数比formal_args
参数多,可分为如下两种情况:
1.如果传入的参数没有指定名称,那么*args会议元组的形式存放这些多余的参数
2.如果传入的参数指定了名称,如score=90,那么**kwargs会以字典的形式存放
这些被命名的参数
''' def showmessage1(name, *p_info):
print("姓名:", name)
for e in p_info:
print(e, end=",")
return showmessage1("Kate")
print("----------------------")
showmessage1("Kate", "male", 18, "Dalian") def showm2(name, *p_info, **scores):
print("姓名:", name)
for e in p_info:
print(e, end=" ")
for item in scores.items(): # ?这里不懂
print(item, end=" ")
print()
return showm2("Kate", "male", 18, "Dalian")
print("-----------------------")
showm2("Kate", "male", 18, "Dalian", math=88, pe=99, eng=60) # 函数的返回值
'''
返回值可以是任意数据类型,不带参数值的return语句返回None
''' def compare(arg1, arg2):
"比较两个参数大小"
result = arg1 > arg2
return result btest = compare(10, 9.99)
print("函数的返回值:", btest) def findwords(sentence):
"统计参数中含有字符e的单词,保存到列表中,并返回"
result = []
words = sentence.split() # ?split()
for word in words:
if word.find("e") != -1:
result.append(word)
return result ss = "Return the lowest index in S where substring sub is found"
print(findwords(ss)) # lamda函数
"""
lambda parameters:expression
parameters是可选参数表,通常使用逗号分隔的变量或者表达式,即位置参数
expression是函数表达式,该表达式中不能包含分支或者循环语句,expression
表达式的值将会作为lambda函数的返回值
lambda函数的应用场景是定义简单的、能在一行内表示的函数,返回一个函数类型
"""
import math area = lambda r: math.pi * r * r
volume = lambda r, h: math.pi * r * r * h
print("{:6.2f}".format(area(2)))
print(volume(2, 5)) list = [3, 5, -4, -1, 0, -2, -6]
list2 = sorted(list, key=lambda x: abs(x))
print(list2) # 闭包和递归函数
"""
闭包(Closure)是一种重要的语法结构,Python支持闭包这种结构,如果一个内部函数
引用了外部函数作用域中的变量,那么这个内部函数就被称为闭包,被引用的变量将和
这个闭包函数一同存在,即使离开了创建它的外部函数也不例外。
闭包:函数和与其相关的引用环境组合而成的实体
在Python中创建一个闭包需要满足以下条件:
1.闭包函数必须有嵌套函数
2.嵌套函数需要引用外部函数中的变量
3.外部函数需要将嵌套函数作为返回值返回
""" def greeting_conf(prefix):
def greeting(name):
print(prefix, name) return greeting mGreeting = greeting_conf("Good Morning")
mGreeting("Wilber")
mGreeting("Will") # ?没懂
print()
mGreeting = greeting_conf("Good Afternoon")
mGreeting("Wilber")
mGreeting("Will") """
递归特点:
1.一个递归的方法即为直接或间接地调用自身的方法
2.任何一个递归方法都必须有一个递归出口
""" def fib(i):
"""
斐波那契数列
"""
if i == 0:
return 0
elif i == 1:
return 1
else:
return fib(i - 1) + fib(i - 2)
print(fib(8)) print(fib(8)) def factorial(i):
"""
求指定参数的阶乘
"""
t = 1
for i in range(1, i + 1):
t *= i
return t print(factorial(6)) # 720 def factorial(i):
"""
递归方式求阶乘
"""
if i == 0:
return 1 # 变量的作用域
"""
局部变量:
局部变量指的是定义在函数内的变量,其作用范围是从函数定义开始,到函数执行结束。
局部变量定义在函数内,只在函数内使用,他与函数外具有相同名称的变量没有任何关系。
""" """
全局变量:
全局变量可以在整个程序范围内访问,局部变量只能在声明他的函数内部访问。全局变量是定义
在函数外的变量,它拥有全局作用域,但其在各函数内部只是可访问的、只读的,全局变量的使
用是受限的。
函数中如果定义了与全局变量同名的变量,其实质是局部变量
不允许在函数中先使用与全局变量同名的变量
""" # global语句
"""
用于在函数内部声明全局变量,降低软件质量(不建议使用)
? nonlocal关键字
"""
basis = 100 # 全局变量 def func4(x, y):
global basis # 声明basis是函数外的局部变量
print(basis) # 100
basis = 90
sum = basis + x + y
return sum print(func4(75, 62))
print(basis) # 90 # ?python的内置函数
# ?python操作相关的函数
Python中用函数实现代码的复用的更多相关文章
- Python 创建函数和代码重用
1. cat func.py #!/usr/bin/python def func(): print "hello,this is a function" def func2(): ...
- 函数和代码复用 --Python
1.关于递归函数的描述,以下选项中正确的是 A.包含一个循环结构 B.函数比较复杂 C.函数内部包含对本函数的再次调用 D.函数名称作为返回值 答案:D 答案解析:递归函数是指函数内部包含对本函数的再 ...
- Python学习笔记(五)函数和代码复用
函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...
- Python基础篇(三)_函数及代码复用
Python基础篇_函数及代码复用 函数的定义.使用: 函数的定义:通过保留字def实现. 定义形式:def <函数名>(<参数列表>): <函数体> return ...
- Python中用format函数格式化字符串的用法
这篇文章主要介绍了Python中用format函数格式化字符串的用法,格式化字符串是Python学习当中的基础知识,本文主要针对Python2.7.x版本,需要的朋友可以参考下 自python2. ...
- python定义的一个简单的shell函数的代码
把写代码过程中经常用到的一些代码段做个记录,如下代码段是关于python定义的一个简单的shell函数的代码. pipe = subprocess.Popen(cmd, stdout=subproce ...
- python中实现延时回调普通函数示例代码
python中实现延时回调普通函数示例代码 这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的 ...
- python自定义函数大全
写的零碎的python脚本太多了,到一定阶段就会出现一个问题,即以前写过的脚本找不到了,现在临时要用,还得再重写一遍,这就非常难受了,代码不能复用. 还好我有一个比较好的习惯,我喜欢把python脚本 ...
- Python中函数和模块的体验与使用
函数基础 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 1.1 快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个 ...
随机推荐
- Java入土---Java运行机制及IDEA的安装使用
Java运行机制及IDEA的安装使用 java程序运行机制 计算机高级语言分为编译型语言跟解释型语言,而java同时具有两者的特点. 可能对于新手来说,什么是编译,什么是解释; 简单来说,编译就是将代 ...
- 【Vulnhub靶场】RED: 1
环境准备 下载靶机导入到vmware 但是获取不到地址,可以根据我博客里的方法修改网卡来获取IP地址 信息收集 我们改好网卡之后,我们使用arp-scan命令来探测靶机的IP地址 靶机IP地址为:19 ...
- 从源码分析RocketMq消息的存储原理
rocketmq在存储消息的时候,最终是通过mmap映射成磁盘文件进行存储的,本文就消息的存储流程作一个整理.源码版本是4.9.2 主要的存储组件有如下4个: CommitLog:存储的业务层,接收& ...
- .net为程序集签名之.pfx文件
项目中误删了.pfx证书文件,导致项目无法启动. 以为很快就能在网上找到解决方案,应该没关系,不过找了半个小时,都没有有效的解决办法,搜出来很多.pfx文件是一个证书文件,里面存储公钥和私钥,对于我要 ...
- web服务器-Nginx下载限速
web服务器-Nginx下载限速 一. 限速介绍 在生产环境中,为了保护WEB服务器的安全,我们都会对用户的访问做出一些限制,保证服务器的安全及资源的合理分配. 限流(rate limiting)是N ...
- 6月19日 python学习总结 Django之路由系统
Django之路由系统 Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调 ...
- 版本控制工具之git的常用命名01
基本命令 从git远程仓库导出项目:git clone http://127.0.0.1/name_master/server.git 从git远程仓库拉取代码:git pull 查看本地仓库状态:g ...
- SINAMICS S120的核心控制单元CU320使用教程,电机模块接线
SINAMICS是西门子公司新一代的驱动产品,它正在逐步取代现有的MASTERDRIVES及SIMODRIVE系列的驱动系统.SINAMICS S120是集V/f控制.矢量控制和伺服控制于一体的多轴驱 ...
- JAVA 用命令提示符执行java找不到或者无法加载主类
使用cmd编译执行java文件时候,报错---找不到或者无法加载主类如下图 把红色部分去掉,再次编译执行如下解决问题 ,执行成功!!!!!! 2.当我们在eclipes中执行运行的时候 ggggggg ...
- Error和Exception有什么区别?
Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题:比如内存溢出,不可能指望程序能处理这样的情况:Exception表示需要捕捉或者需要程序进行处理的异常, ...