09 函数初识
一 函数的的定义
# 函数: 对代码块和功能的封装和定义
# 引入 回家过程 未用函数
# print("步行")
# print("坐地铁")
# print("坐私家车")
#用函数
# def go_home():
# print("先步行")
# print("坐地铁")
# print("坐私家车")
# go_home()
# go_home()
⼆.函数的定义, 函数名, 函数体以及函数的调⽤
1.用 def 来定义函数.其基本语法如下:
# def 函数名()
# 函数体
2.函数名的规范和使用与变量基本一致
3.函数体 : 函数被执行之后要执行的代码.(如下)
# print("先步行")
# print("坐地铁")
# print("坐私家车")
4.函数的调用使⽤函数名可以调⽤函数,
# 写法: 函数名(), 这个时候函数的函数体会被执⾏.
# 如上述 go_home()
# 结果:先步行
# 坐地铁
# 坐私家车
三.函数的返回 (return) 执行完函数后,可以用return来返回结果.
1. 函数中遇到return,此函数结束,不再执行.(如下)
# def go_home():
# print("先步行")
# print("坐地铁")
# return
# print("坐私家车")
# go_home()
# 输出结果 (先步行,坐地铁)
2.给函数的调⽤者⼀个访问结果(返回值)
(1)返回一个结果:
# def go_home():
# print("先步行")
# print("坐地铁")
# print("坐私家车")
# return "有人接,有饭吃"
# ret=go_home()
# print(ret)
(2)返回多个结果: 调用者可以接受一个元组,调用者可以解构成多个变量.
# def go_home():
# print("先步行")
# print("坐地铁")
# print("坐私家车")
# return "有人接,有饭吃","终于可以睡觉了","zzzz"
# ret=go_home()
# print(ret)
# 结果 : ('有人接,有饭吃', '终于可以睡觉了', 'zzzz') 元组
# a,b,c=go_home()
# print(a,b,c)
# 结果 : 解构成多个变量
总结return返回值:
# a. 如果return什么都不写 或者 ⼲脆不写return .那么返回的就是None
# b .如果return后⾯写了⼀个值. 则调⽤者可以接收⼀个结果
# c .如果return后⾯写了多个结果, 则调⽤者可以接收⼀个tuple, 调⽤者可以直接解构成多个变量
四. 函数的参数
1.参数的定义:函数在访问的时候,给函数传递的一些信息.如果有很多个参数,则用逗号分开.
2.参数的语法:
# def 函数名( 参数列表 )
# 函数体
# eg:
# def go_home(trac):
# print("先步行")
# print("坐"+trac)
# print("坐私家车")
# go_home("地铁")
3.参数的分类
# (1)形参:写在函数声明的位置的变量叫形参. 形式上的⼀个完整. 表⽰这个函数需要xxx
# (2)实参:在函数调⽤的时候给函数传递的值. 叫实参, 实际执⾏的时候给函数传递的信息. 表⽰给函数xxx
4.实参的分类:
(1). 位置参数: 在访问yue()的时候, 我们按照位置的顺序分别把"地铁", "私家车", 赋值给 tra1,tra2
# 在传参过程中. 系统会默认按照位置把实参赋值到形参.
# def go_home(tra1,tra2):
# print("先步行")
# print("坐"+tra1)
# print("坐"+tra2)
# go_home("地铁","私家车")
(2). 关键字参数: 我们不需要记住每个参数的位置. 只要记住每个参数的名字就可以了
# def go_home(tra1,tra2):
# print("先步行")
# print("坐"+tra1)
# print("坐"+tra2)
# go_home(tra2="私家车",tra1="地铁")
(3). 混合参数 :可以把上⾯两种参数混合着使⽤. 也就是说在调⽤函数的时候即可以给出位置参数, 也可
# 以指定关键字参数. (注意: 在使⽤混合参数的时候, 关键字参数必须在位置参数后⾯)
# def go_home(tra1,tra2):
# print("先步行")
# print("坐"+tra1)
# print("坐"+tra2)
# go_home("地铁",tra2="私家车")
5.形参的分类:
(1) 位置参数 : 按照位置来赋值, 到⽬前为⽌, 我们编写的函数都是这种
(2) 默认值参数 : 在函数声明的时候, 就可以给出函数参数的默认值.在调⽤的时候可以给出具体的值, 也可以不给值, 使⽤默认值.
# def go_home(tra1,tra2="私家车"):
# print("先步行")
# print("坐"+tra1)
# print("坐"+tra2)
# go_home("地铁")
# 注意: 必须先声明位置参数, 才能声明默认值参数.(大多数传进来的参数都是一样的.
课后作业
7. 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表得分
def func7(dic):
for k,v in dic.items():
if len(v)>2:
v=v[0:2]
dic[k]=v
return dic
print(func7({"k1": "v1v1", "k2": [11,22,33,44]}))
8.写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,
此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33} def func8(lst):
dic={}
if type(lst)==list:
for i in range(0,len(lst)):
dic[i]=lst[i]
return dic
print(func8([11,22,33]))
9,写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,
此函数接收到这四个内容,将内容追加到一个student_msg文件中。
def func9(name,agen,age,edu):
with open("student_msg",mode="a",encoding="UTF-8")as f:
f.write("姓名:%s,性别:%s,年龄:%s,学历:%s" %(name,agen,age,edu))
f.flush()
f.close()
name=input("请输入您的姓名:")
agen=input("请输入您的性别:")
age=input("请输入您的年龄:")
edu=input("请输入您的学历:")
func9(name,agen,age,edu)
10 对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
def func10(name,age,edu, agen="男"):
with open("student_msg",mode="a",encoding="UTF-8")as f:
f.write("姓名:%s,性别:%s,年龄:%s,学历:%s\n" %(name,agen,age,edu))
f.flush()
f.close()
while 1:
name=input("请输入您的姓名:")
age=input("请输入您的年龄:")
edu=input("请输入您的学历:")
agen = input("默认性别是男,直接回车即可")
if agen=="":
func10(name,age,edu,)
else:
func10(name,age,edu,agen)
flag=input("请问是否继续录入,输入Q退出")
if flag.upper()=="Q":
break
11.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(升级题)
import os
def func11(file_name,old,new):
with open(file_name,mode="r",encoding="UTF-8")as f,\
open(file_name+"new",mode="w",encoding="UTF-8")as f1:
for line in f:
line=line.replace(old,new)
f1.write(line)
os.remove(file_name)
os.rename(file_name+"new",file_name)
func11("a1","黑","白")
12.写一个函数完成三次登陆功能,再写一个函数完成注册功能(升级题)
# 注册
def regist():
while 1:
user=input("请输入用户名:")
pwd=input('请输入密码:')
with open("a1",mode="r+",encoding="UTF-8")as f:
for line in f:
lst=line.strip().split("\t") #将文件里的每一行用\t切割成列表
username=lst[0] # 列表的第零项是用户名,第一项是密码
if user==username:
print("该用户名已存在,请重新输入")
break
else:
f.write(user+"\t"+pwd+"\n") #如果已有文件中没有该用户名,则把该用户名,密码添加到文件中.
print('注册成功')
return
regist()
# 三次登陆
def log():
n=0
while n<3:
user1=input("请输入用户名:")
password=input("请输入密码:")
with open("a1",mode="r",encoding="UTF-8")as f:
for line in f:
if user1+'\t'+password==line.strip():
print("登陆成功")
return #终止函数
else:
print("登陆失败")
n=n+1
else:
print("三次登陆失败,请十分钟后重试")
log()

python全栈开发 * 09知识点汇总 * 1806011的更多相关文章

  1. python全栈开发 * 11知识点汇总 * 1806011

    一.函数名的运⽤, 第⼀类对象 函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 1. 函数名的内存地址def func(fn): print(fn)print(func) # ...

  2. python全栈开发 * 10知识点汇总 * 180612

    10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...

  3. python全栈开发 * 01知识点汇总 * 180530

    一 python简介. 1.创始人:  吉多 .范罗苏姆  \   (Guido van Rossum). 2.时间  :  1989年. 3.主要应用领域  :  云计算 \  WEB开发  \   ...

  4. python全栈开发 * 32知识点汇总 * 180717

    32 网络编程 (一)一.架构 定义:程序员开发的一种模式. 分类: C/S 架构 C/S即:Client与Server , 客户端/ 服务器模式 . 缺点 : 冗余 B/S 架构 Browser与S ...

  5. python全栈开发 * 27知识点汇总 * 180710

    27   time  os  sys  模块 time 模块 一.表示时间的三种方式 时间戳(timestamp), 元组(struct_time),格式化时间字符串(Format string) 小 ...

  6. python全栈开发 * 26知识点汇总 * 180709

    26 logging collections random 模块 一.logging低配:日志不能写入文件与显示同时进行 import logging logging.basicConfig(leve ...

  7. python全栈开发 * 12 知识点汇总 * 180530

    12 知识点总结 装饰器进阶 ⼀. 通⽤装饰器的回顾1.开闭原则: 对增加功能开放. 对修改代码封闭2.装饰器的作⽤: 在不改变原有代码的基础上给⼀个函数增加功能3.通⽤装饰器的写法:def wrap ...

  8. python全栈开发 * 36知识点汇总 * 180721

    36 操作系统的发展史 进程一.手工操作--穿孔卡片 1.内容: 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制 台开关启动程序针对 ...

  9. python全栈开发 * 31知识点汇总 * 180716

    31 模块和包一.模块(一)模块的种类:内置模块,自定义模块,扩展模块第三方模块(二)自定义模块 1.模块的创建 : 新建一个py文件. 2.模块名 : 模块名需要符合变量的命名规范. 3.模块的导入 ...

随机推荐

  1. python接口自动化测试(七)-unittest-批量用例管理

    我们日常项目中的接口测试案例肯定不止一个,当案例越来越多时我们如何管理这些批量案例?如何保证案例不重复?如果案例非常多(成百上千,甚至更多)时如何保证案例执行的效率?如何做(批量)测试数据的管理?如何 ...

  2. 远程FTP下载文件

    现在存在以下环境: 远程服务器:192.168.1.107 用户名:dt 密码:dt123 需要从该服务器上下载文件到本地 1.登录(进入到那个目录登录的 ,文件就会被下载到该文件) ftp 192. ...

  3. 在windows命令行批量ping局域网内IP

    参考了博客园Alfred Zhao的文章<Windows平台ping测试局域网所有在用IP> 在cmd命令行运行如下命令即可: ,,) -w .%i | find "回复&quo ...

  4. 发现2017年最好的CSS框架

    如今,无数的框架出现在定期而少数人喜欢自助,Foundation和angular.js主宰了整个世界的发展.CSS代表用于描述HTML(或XML)文档表示的样式表语言.一个框架被定义为一个包,它由一组 ...

  5. solr+zookeeper集群配置

    将solr配置文件交给zookeeper进行管理 ./zkcli.sh -zkhost node01:2181,node02:2181,node03:2181 -cmd upconfig -confd ...

  6. KADEMLIA算法

    一.概述 基于异或距离算法的分布式散列表(DHT), 实现了去中心化的信息存储于查询系统: Kademlia将网络设计为具有160层的二叉树,树最末端的每个叶子看作为节点,节点在树中的位置由同样是16 ...

  7. 让rpc支持双向通信

    rpc采用了C/S模型,不支持双向通信:client只能远程调用server端的RPC接口,但client端则没有RPC供server端调用,这意味着,client端能够主动与server端通信,但s ...

  8. Atitit 项目版本管理gitflow 与 Forking的对比与使用

    Atitit 项目版本管理gitflow 与 Forking的对比与使用 1.1. 版本管理的历史 csv>>svn >git 1 1.2. gitflow的核心是分版本管理,for ...

  9. 仅仅有五行的Floyd最短路算法

    暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,例如以下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道随意两个城市之前的最短路程. 上图中有4个城市8条公路,公路上的数 ...

  10. Python中_,__,__xx__的区别

    _xx 单下划线开头 Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范. #! /usr ...