python程序设计——函数设计与调用
一、函数定义与调用
def 函数名([参数列表]):'''注释'''函数体
# 输出小于n的斐波那契数 >>def fib(n):a,b=1,1while a < n:print(a,end=' ')a,b=b,a+bprint()>>fib(3) 1 1 2
二、形参与实参
在绝大多数情况下,在函数内部直接修改形参的值不会影响实参
def addOne(a):print(a)a+=1print(a)>>a=3 >>addOne(a) 3 4>>a 3
修改函数参数值的方式:
如果传递给函数的是可变序列,
并且在函数内部使用下标或其他方式为课表序列增加、删除、修改元素值时,
修改后的结果可以反映到函数之外,即实参得到相应修改
# 修改列表元素的值def modify(v):v[0] = v[0] + 1>>a=[2] >>print(a) [2] >>modify(a) >>print(a) [3]
# 为列表增加元素 def addList(v,item):v.append(item)>>a=[2] >>addList(a,3) >>print(a) [2,3]
三、参数类型
python函数参数主要分为:普通参数、默认值参数、关键参数、可变长度参数等
在定义函数时不需要指定参数的类型,形参类型由实参类型以及python解释器的理解和推断决定
同样,不需要指定函数的返回值类型,由return语句返回值的类型决定
缺少return语句或没有执行return语句时,默认返回空值None
1. 默认值参数
调用带有默认值的函数时,可以不对默认值参数赋值,也可以通过显示赋值来替换其默认值
在定义带有默认值的函数时,默认值参数必须出现在函数形参列表的最右端,且任何一个默认值参数右边都不能再出现非默认值参数
def 函数名(..., 形参名=默认值 ):函数体def say(message, time=1):print((message+' ')*times) >>say.__defaults__(1,)
2.关键参数
指调用函数时的参数传递方式,而与函数定义无关
通过关键参数可以按名字传递值,实参顺序可以和形参不一致
def demo(a,b,c=5):print(a,b,c)>>demo(3,7) 3 7 5>>demo(c=8,a=9,b=0) 9 0 8
3.可变长度参数
*parameter 用来接收任意多个实参并将其放在一个元组中
**parameter 用来接收类似于关键参数一样显示赋值形式的多个实参并将其放入字典中
def demo(*P):print(P)# 将实参放入元组 >>demo(1,2,3) (1,2,3)# 在调用函数时,自动将接收参数转换为字典 def demo(**p):for item in p.items():print(item)>>demo(x=1,y=2,z=3) ('x', 1) ('y', 2) ('z', 3)
4.参数传递时的序列解包
可以使用列表、元组、集合、字典及其他可迭代对象作为实参,
并在实参名称前加一个星号,解释器自动进行解包,并传递给多个单变量形参
要保证实参中元素个数与形参个数相等
def demo(a,b,c):print(a+b+c)>>seq = [1,2,3] >>demo(*seq) 6# 字典型,默认按照键解包 >>dic={1:'a',2:'b',3:'c'} >>demo(*dic) 6# 指定按照值解包 >>demo(*dic.values()) abc
四、变量作用域
函数内部定义的变量一般为局部变量,不属于任何函数的变量一般为全局变量
应尽量避免使用全局变量,引用速度慢,增加不同函数之间的隐式耦合度
如果想在函数内部修改一个定义在函数外的变量值,那么这个变量就不能是局部的
def demo():global x # 声明全局变量x=3 # 修改全局变量的值y=4 # 局部变量print(x,y)x=5 # 在函数外定义全局变量 demo() # 调用函数,修改全局变量的值 print(x) out: 5print(y) # 函数结束后,局部变量自动删除 out: NameError: name 'y' is not defineddel x # 删除全局变量
不同模块间共享全局变量,定义单独的模块,传递全局变量
# 定义模块 A.py global_var = 0# 在模块 B.py中 import A A.global_var = 1# 在模块C.py中 import A A.global_var = 2
函数实例:
1、编写函数,接收字符串参数,返回一个元组,其中第一个元素为大写字母个数,第二个为小写字母个数
def countStr(s):result = [0,0]for ch in s:if 'a'<= ch <= 'z':result[1] += 1elif 'A' <= ch <= 'Z':result[0] += 1return resulttmpStr = 'abANV' bigN,littleN = countStr(tmpStr) print(bigN,littleN)out: 3 2
2、编写函数,接收一个所有元素值互不相等的整数列表x和一个整数n,要求将值为n的元素作为支点,
将列表中所有小于n的元素全部放在n的前面,所有值大于n的元素放在n后面
1 import random 2 def sortN(x,n): 3 if n not in x: 4 print(n,' is not an element of ',x) 5 return 6 7 i = x.index(n) # 获取指定元素在列表中的索引 8 x[0],x[i] = x[i],x[0] # 与第0个元素交换 9 key = x[0] 10 11 i = 0 12 j = len(x)-1 13 while i<j: 14 while i < j and x[j] >= key: 15 j-=1 16 x[i]=x[j] # 从后向前找第一个比指定元素小的元素 17 18 while i < j and x[i] <= key: 19 i+=1 20 x[j]=x[i] # 从前向后找第一个比指定元素小的元素 21 22 x[i] = key 23 24 return x
1 x=list(range(1,10)) 2 random.shuffle(x) 3 print(x) 4 sortN(x,4) 5 print(x)
转载于:https://www.cnblogs.com/feinaio2017/p/8799216.html
python程序设计——函数设计与调用相关推荐
- python程序设计课程设计_《Python程序设计》教学大纲.doc
PAGE 理论课程教学大纲 <Python程序设计>教学大纲 课程编号: 总 学 时:64(其中,讲课:32:实验:32) 学 分:3 实践教学:0周 修读专业:地理信息系统.应用化学 大 ...
- python程序设计教学设计_Python教案 - 教学设计.doc
时间:课题程序设计基础--绪论教学目标1. 了解程序设计语言的发展历史2. 理解Python语言的特点及其重要性3. 掌握Python语言Hello程序的编写方法4. 掌握Python语言开发的运行环 ...
- python程序设计课程设计_《Python程序设计》课程教学大纲
< python 程序设计>课程教学大纲 课程代码: 060132002 课程英文名称: Python Program Design 课程总学时: 32 讲课: 32 实验: 0 上机: ...
- c向python注册函数_python如何调用C, 如何注册成C的回调函数(python后台程序常用方法)...
其实是python后台程序常用方法: C开发完成底层的功能,python直接把C当做python模块进行调用. 需要做两个工作: python能调用C语言的函数: python通过调用C函数,并注册p ...
- python echo函数_python如何调用php文件中的函数详解
前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1. ...
- python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...
算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...
- [再学Python] - 6 - 函数的定义调用与返回
函数基本知识 语法结构 定义: 使用def语句来定义函数 def <name> (<parameter>,<parameter>,--):<body> ...
- java调用python的函数_java如何调用python的.py文件,以及如何执行里面的函数,和创建...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package com.hmammon.service; import java.io.FileInputStream; import java.io.F ...
- python程序设计课程设计二级减速器_机械工程专业的本科生应该自学哪些知识?...
本人机械工程师,偏设计方向,硕士学历,有9年机械工程经验,曾担任某央企项目负责人,算不上大牛. 虽然离题目提出时间已经很遥远了,但看了这个题目和许多回答真的感慨很多,加上一些知友最近私信问我类似的问题 ...
最新文章
- 23-hadoop-hive的DDL和DML操作
- CentOS6.*安装gitolite
- 【zt】我所经历的ERP项目的失败
- matlab相关的数字信号,数字信号处理及其MATLAB实现.ppt
- JetBrains 第二轮:再为免费全家桶续命三个月
- jquery学习手记(2)jQuery对象和DOM对象相互转换
- luogu3810 【模板】三维偏序(陌上花开)
- 简单的php服务文件下载,php文件下载
- 如何做好仓库管理的工作专业知识
- 从平庸到杰出,技术人应该专注的底层知识是什么?
- 【备战春招/秋招系列】美团Java面经总结进阶篇 (附详解答案)
- net core webAPI NOPI 导出Excel封装
- 矩阵的卷积以及使用python计算方法
- unity WebGL射线检测
- 163-H桥电机驱动电路
- Android AndroidManifest.xml文件权限出现“Permission is only granted to system apps”的解决办法
- oracle查询数字类溢出,有趣的数值溢出(一)
- AUI框架的介绍和使用
- ISO/IEC 9126 软件质量模型
- 为什么重写equals方法必须要重写hashCode方法