1、函数 function

什么是函数:函数是可以重复执行的语句块,可以重复调用;

作用:

用于封装语句,提高代码的重用性

用于定义(创建)用户级别的函数

语法:

def 函数名(形参列表):

语句块

说明:

1、函数的名字就是语句块的名称;

2、函数名的命名规则与变量名相同(函数名必须是标识符(字母或下划线开头));

3、函数名是一个变量;

4、函数有自己的名字空间,在函数外部不可以访问函数内部的变量,在函数内部可以访问函数外部的变量,要让函数处理外部数据需要用参数给函数传入一些数据;

5、参数列表 可以为空;

6、语句部分不能为空,如果为空需要用pass语句填充;

2、函数调用:

函数名(实际调用传递参数,简称实参)

说明:

函数调用是一个表达式;

如果没有return语句,函数执行完毕后返回None对象;

如果函数需要返回其它的对象需要用到return语句;

3、函数说明:

函数外部无法访问函数内部的局部变量;

函数内部可以访问函数外部的变量,但不能修改函数外部变量的绑定关系;

示例:

x=0defmyadd(a,b):

x= a +bprint(x) #结果为300

myadd(100, 200)print(x) #结果为0

4、return 语句:

语法:

return [表达式]

注:[] 代表内容可省略

作用: 结束函数的执行,返回到调用函数位置!

只用于函数中,结束当前的函数的执行,返回到调用该函数的位置 ,同时返回表达式的引用关系;

说明:

1、return 语句后跟的表达式可以省略,省略后相当于return None;

2、如果函数内没有return语句,则函数执行完最后一条语句后返回None(相当于在最后加了一条return None语句);

示例:defsay_hello():print("1")print("2")return

print("3")

say_hello()

say_hello()#注意:这里函数调用返回的结果是1 ,2, 1,2;函数内看到return语句表示结束当前的函数执行,返回调用该函数位置。

5、函数的参数传递:

传递方式:

位置传参

序列传参

关键字传参

字典关键字传参

5.1、位置传参:

实际传递参数(以下简称实参)与形式参数(形参)的对应关系按位置来依次对应;

示例:

position_give_args.pydefmyfun(a, b, c):print("a=", a)print("b=", b)print("c=", c)

myfun(1, 2, 3)

5.2、序列传参:(归属位置传参)

序列传参是指在函数调用过程中用“*”将序列拆解后按位置进行传递的传参方式;

示例:sequence_give_args.pydefmyfun(a, b, c):print("a=", a)print("b=", b)print("c=", c)

s= "ABC"L= [4,5,6]

t= (1.1, 2.2, 3,3)

myfun(*s) #字符串序列传参

myfun(*L) #列表序列传参

myfun(*t) #元组序列传参

5.3、关键字传参:

关键字传参是指传参时,按着形参的“名称”给形参赋值,实参和形参按名称进行匹配;

示例:#keyword_give_args.py

defmyfun(a, b, c):print("a=", a)print("b=", b)print("c=", c)

myfun(b=2, c=3, a=1)

5.4、字典关键字传参:(归属关键字传参)

是指实参为字典,将字典用“**” 拆解后进行关键字传参的传参方式;

示例:dict_keyword_give_args.pydefmyfun(a, b, c):print("a=", a)print("b=", b)print("c=", c)

d= {"a":111, "c":333, "b":222}

myfun(**d)

说明:字典的键名和形参名必须一致;

字典的键名必须为字符串(且必须为标识符的规则);

字典的键名要在形参中存在;

5.5、函数的综合传参:

函数的传参方式在能确定形参 能唯一匹配到对应实参的情况下可以任意组合;

要求:

位置传参在前,关键字传参在后!

示例:com_give_args.pydefmyfun(a, b, c):print("a=", a)print("b=", b)print("c=", c)

myfun(1,c = 3, b = 2)

myfun(100, *[200, 300])

myfun(*"AB", 300)

myfun(*"AB", **{"c":300})

6、函数的缺省参数

语法:

def 函数名(形参名1=默认实参1,形参名2=默认实参2,....)

说明:

缺省参数必须自右至左依次存在,如果一个参数 有缺省参数,则其右侧的所有参数都必须有缺省参数;

def fa(a=1, b, c=3):#是错误的

缺省参数可以有0个或多个,甚至全部都是缺省参数;

示例:#defualt_args.py

def info(name, age=1,address="未填写"):print(name,"今年",age,"岁,住在:", address)

info("小李")

info("小李", age=20)

info("小李", age=20,address="重庆")

info("小李", 33, "重庆市大竹林")

7、函数形参的定义方式:

位置形参

星号元组形参

命名关键字形参

双星号字典形参

7.1、位置形参:

语法:

def 函数名(形参名1,形参名2,...):

语句块

7.2、星号元组形参:

语法:

def 函数名(*元组形参名):

语句块

作用:收集多余位置传参

print("示例见:#star_tuple_args.py")#星号元组形参

def fb(*args):"""args绑定一个元组"""

print("实参个数是:", len(args))print("args:", args)

fb()

fb(1,2,3,4)

7.3、命名关键字形参:

语法:

def 函数名(*,命名关键字形参):

语句块

def 函数名(*args,命名关键字形参):

语句块

作用: 强制*后所有的传参都必须用关键字传参

示例:#keywords_args.py

def fa(a, b, *, c, d):"""强制c,d必须用关键字传参"""

print(a, b, c, d)#fa(1,2,3,4) #错的

fa(1,2, c=3, d=4)

fa(1,2, d=400, c=300)def fb(a, b, *args, c, d):"""强制c,d必须用关键字传参"""

print(a, b, args,c, d)#fb(1,2,3,4,5,d=400,c=200) #1 2 (3, 4, 5) 200 400

fb(1,2,3,4,5,**{"d":400,"c":300}) #1 2 (3, 4, 5) 300 400

7.4、双星号字典形参:

语法:

def 函数名(**字典形参名):

语句

作用: 收集多余的关键字传参

示例:#double_start_keyword_args.py

def fa(**kwargs):"""kwargs绑定字典"""

print("多余的关键字传参的个数是:", len(kwargs))print("kwargs =", kwargs)#fa(a=10, b=20, c=30) #kwargs = {"a": 10, "b": 20, "c": 30}

def fb(*args, a, **kwargs):print(args, a, kwargs)

fb(1,2,3,4,5, a=10, b=30, c=40) #(1, 2, 3, 4, 5) 10 {"b": 30, "c": 40}

函数的参数说明:

位置形参,星号元组形参,命名关键字形参,双星号字典形参,缺省参数可以混合使用;

函数参数自左至 的顺序依次为:

位置形参

星号元组形参

命名关键字形参

双星号字典形参

示例:def fn(a, b, *args, c, d, **kwargs):print(a, b, args, c, d, kwargs)

fn(1,2,3,4, c=100, d=200, e=300, f=400) #1 2 (3, 4) 100 200 {"e": 300, "f": 400}

#1.思考题#查看>>>help(print)#猜想print函数的参数列表是如何定义的?

def myprint(*args, sep=" ", end=" ")

L= [str(x) for x in args] #把所有元组元素转为字符串列表

s = sep.join(L) #把列表中字符串以sep变量字符串连接成字符串,赋值给s

s +=endprint(s, end="")#方法二

def pyprint1(*args, sep=" ", end=" "):print(*args, sep=sep, end=end) #直接调用print函数,传参#myprint(1,2,3,4,5)

myprint("hello","world",sep="#")

myprint(1,2,3,4, sep=":", end="我是结尾 ")#2..思考题写一个myrange函数,参数可以传入1-3个,实际意义同range函数规则相同,此函数返回符合range(。。。)函数规则的列表

def myrange(start,stop=None,step=1):

r_lst=[] #即将返回的列表

#调整三个形参的值

if stop isNone:

stop=start

start=0if step >0:while start

r_lst.append(start)#把当前数加入到列表中

start += step #让start向后移动,准备下次操作

else: #当步长小于0的情况,倒序

for x inrange(start,stop,step):

r_lst.append(x)returnr_lst#L = myrange(4)print(L) #[0,1,2,3]

L = myrange(4,6)print(L) #[4,5]

L = myrange(1,10,3)print(L) #[1,4,7]

L = myrange(10,1,-2)print(L)

print("1.题---------------")#练习#1. 算出 100-999之间的水仙花数(narcissistic number)#水仙花数是指百位的3次方,加上十位的3次方,加上个位的3次方等于原数的整数#例如 153 = 1 ** 3 + 5 ** 3 + 3 ** 3#建议先写一个函数is_narcissistic(n)来判断n是否为水仙花数,如果是返回True,否则返回False#再调用些函数进行判断

defis_narcissistic(n):

L=list(str(n))

jisuan= int(L[0]) ** 3 + int(L[1]) ** 3 + int(L[2]) ** 3

if jisuan ==n:returnTrueelse:returnFalse#

#n = int(input("请输入三位整数:"))#print("判断", n, "是否为水仙花数,结果", is_narcissistic(n))

print("水仙花数为:")for x in range(100,1000):ifis_narcissistic(x):print(x, end=" ")else:print()print(" ")print("2.题---------------")#2. 求100以内的全部素数(质数)#2,3,5,7,11..........#建议用函数来做#两个函数#def is_prime(x):#判断 x是否是素数,是返回true ,否返回False#def print_primes(n):#此函数打印小于n的全部素数#print_primes(100)开始打印

#定义判断质数函数,是返回true,不是返回false

defis_prime(x):if x < 2:returnFalsefor i in range(2, x):if x % i ==0:returnFalsereturnTruedefprint_primes(n):print("小于",n,"的全部素数:",end=" ")for i inrange(n):#调用函数判断i是否是素数

ifis_prime(i):print(i, end=" ")else:print()

print_primes(100)print(" ")#3.将上次的student_info.py改写为两个函数:#1) def input_student():#2) def output_student(L):#主程序调用:#docs = input_student()#output_student(docs)#print(请再添加几个学生信息..)#docs += input_student()#print(添加之后的学生信息是)#output_student(docs)

definput_student():

lst= [] #定义空列表

#定义循环读入学生信息

whileTrue:

student_name= input("请输入学生姓名:")#判断输入学生姓名为空结束输入

if notstudent_name:breakstudent_age= int(input("请输入学生年龄:"))

student_score= int(input("请输入学生成绩:"))

student_dict= {} #定义新空字典,用于存放学生信息

student_dict["name"] =student_name

student_dict["age"] =student_age

student_dict["score"] =student_score#将字典使用append方法,存入到L列表中,注意这此处未改变L全局变量的绑定关系

lst.append(student_dict)#print("打印列表lst信息: ",lst)

returnlstdefoutput_student(L):#显示学生信息列标头

print("+","-" * 20,"+","-" * 10,"+","-" * 12, "+")print("|", "name".center(20),"|","age".center(10), "|", "score".center(12), "|")print("+","-" * 20,"+","-" * 10,"+","-" * 12, "+")#此处打印所有学生的信息

#把学生的数据取出来,用k绑定对应的字典

for k inL:#将姓名格式变成20宽度居中的字符串

center_name = k["name"].center(22)#先将年龄转换为字符串

str_age = str(k["age"])

center_age= str_age.center(12)

str_score= str(k["score"])

center_score= str_score.center(14)#print("|",center_name, "|", center_age, "|", center_score, "|")

line = "|%s|%s|%s|" %(center_name, center_age, center_score)print(line)print("+","-" * 20,"+","-" * 10,"+","-" * 12, "+")defmain():

docs=input_student()

output_student(docs)print("请再添加几个学生信息..")

docs+=input_student()print("添加之后的学生信息是")

output_student(docs)

main

python入门之函数调用第三关-Python 基础3 函数function相关推荐

  1. python入门教程NO.1 用python打印你的宠物小精灵吧

    python入门教程NO.1 用python打印你的宠物小精灵吧 我们来通过一个有趣的例子开始编写我们的第一个python代码. 本文涉及的python基础语法为:print输出函数,赋值,字符串 p ...

  2. python入门教程NO.3 用python破解谍报密码

    python入门教程NO.3 用python破解谍报密码 本文涉及的python基础语法为:列表及其方法 列表 我们发现了一段存在**[]中的谍报密码,为了破解他,我们必须先来学习一下,这个存放着谍报 ...

  3. Python入门(二)之Python的集成开发环境(IDE)

    点赞.关注再看,养成良好习惯 本系列视频课程详见超星学习通:https://me.chaoxing.com(点击方可链接) 欢迎博友们亲临指导 1. 引言 在博文<Python入门(一)之Pyt ...

  4. python入门之函数调用第一关_零基础学习 Python 之与函数的初次相见

    写在之前 大家好,这是首发在我公众号「Python空间」的第 26 篇文章,欢迎关注. 大家好,这里是零基础学习 Python 系列,在这里我将从最基本的Python 写起,然后再慢慢涉及到高阶以及具 ...

  5. python入门教程傻瓜版_毫无基础的人如何入门 Python ?Python入门教程拿走不谢啦!...

    随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?这里整理了一些个人经验和Python入门教程供大家参考. 如果你是零基 ...

  6. 廖python入门视频_GitHub - aisuhua/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...

    PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...

  7. python入门之函数调用第二关_Python入门之函数调用——第2关:函数正确调用 - 得到想要的结果...

    任务描述 函数被定义后,本身肯定不会自动执行的,只有在被调用后,函数才会被执行,得到相应的结果. 本关的目标是让读者了解并掌握函数调用的相关知识. 相关知识 定义函数与调用函数的顺序 在定义了函数之后 ...

  8. 小学生python入门-极度舒适的全套 Python 入门教程,小学生看了也能学会

    编程几乎已经成为现代人的一门必修课,特别是 Python ,不仅长期霸占编程趋势榜.薪资榜第一,还屡屡进入小学教材,甚至成为浙江省信息技术高考项目-- 今天,小编带来了一门极度舒适的 Python 入 ...

  9. python入门买什么书-关于 Python 的经典入门书籍有哪些?

    内容太长,一不小心就刷屏了,完整内容请访问原文: 筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内. python现在的主流版本是3.7(有明显性能提升,强烈推荐) 3.6, 不基于这两 ...

最新文章

  1. 如何获取一个dll的cwinapp对象_一个女孩子是如何和暧昧对象确定恋爱关系的
  2. python点击按钮浏览本地文件_Python button选取本地图片并显示的实例
  3. C++Wiggle Sort摆动排序的实现算法(附完整源码)
  4. QuerySyntax(查询语法)
  5. 【数论】Crash的数字表格 / JZPTAB(P1829)
  6. 程序员想知道代码是怎样跑起来的
  7. 关于使用public class 和 class声明类的区别
  8. 【codevs1286】【BZOJ1503】郁闷的出纳员,splay练习
  9. python如何安装wordcloud_基于python的wordcloud库的安装方法
  10. 服务器为什么要装操作系统,服务器需要安装操作系统吗
  11. Python解压压缩包
  12. 图(graph)神经网络学习(四)--代码解析(Model_2)
  13. PHP session的实现原理
  14. 六度分离 HDU - 1869 (最短路径)
  15. python第三方插件登录网易音乐_基于 Python3 的网易云音乐下载器(支持嵌入专辑封面等 ID3-Tags 信息)...
  16. dtim 间隔(Delivery Traffic Indication Message)
  17. 来自福布斯富豪榜马总的建议,为什么一定要学Python?
  18. 深度强化学习中深度Q网络(Q-Learning+CNN)的讲解以及在Atari游戏中的实战(超详细 附源码)
  19. 儿童用灯哪个品牌好?推荐专业的儿童护眼台灯
  20. pcl点云特征提取 法线估计 PFH FPFH NARF 惯量偏心矩 RoPs特征 视点特征直方图VFH GASD特征

热门文章

  1. Apache Mnemonic成为Apache顶级项目,主要解决大数据性能问题
  2. 恢复删除的Exchange邮箱
  3. 开源.NET项目 CSS、JS资源优化类库及工具
  4. 数据降维降维(二)----Laplacian Eigenmaps
  5. js跨域的理解与实现
  6. java通过证书获取CN_java – 从证书DN解析CN [重复]
  7. android 英语论文,Android中Activity的生命周期英语论文+译文.doc
  8. verilog赋多位值_Verilog入门学习笔记——第一弹
  9. Oracle如何建立多库,基于Oracle多库查询方法(分享)
  10. android注销广播接收器,使用广播接收器 - chuiyuan的个人页面 - OSCHINA - 中文开源技术交流社区...