一.函数

函数的概念:对功能或者动作的封装可以帮我们把一段公共的代码提取出来

语法如下

def 函数名(形参):
函数体
函数名(实参) # 函数名()
def yue():
print("1. 打开手机")
print("2. 打开陌陌")
print("3. 找个漂亮的小姐姐")
print("4. 探讨一下人生")
print("5. 一起出来happy") yue() # 执行一次函数
print("休息休息")
yue() # 再来一次
print(yue)

二.函数的返回值
return, 终止函数的运行
1. 函数内部不写return, 默认在最后返回None
2. 函数只写了return 返回None
3. return 值 有一个返回值
4. return 值1, 值2, 值3 .... 有多个返回值
返回值返回给调用方

例一
def yue():
print("1. 打开手机")
print("2. 打开陌陌")
print("3. 找个漂亮的小姐姐")
print("4. 探讨一下人生")
print("5. 一起出来happy")
ret = yue()
print(ret)
例二
def yue():
print("1. 打开手机")
print("2. 打开陌陌")
return
print("3. 找个漂亮的小姐姐")
print("4. 探讨一下人生")
print("5. 一起出来happy")
例三
def yue():
print("1. 打开手机")
print("2. 打开陌陌")
print("3. 找个漂亮的小姐姐")
print("4. 探讨一下人生")
print("5. 一起出来happy")
return "漂亮的小姐姐" # 返回到哪儿了???? 谁调用的就返回给谁
例四
def yue():
print("1. 打开手机")
print("2. 打开微信")
print("3. 找个漂亮的小姐姐")
print("4. 探讨一下人生")
print("5. 一起出来happy")
return "漂亮的小姐姐","大妈", "大爷", "鲜肉" # 返回到哪儿了???? 谁调用的就返回给谁
ret = yue() # ('漂亮的小姐姐', '大妈', '大爷', '鲜肉')
print(ret)

三.函数的参数(一部分)
形参: 在函数声明位置的变量
1. 位置参数2. 默认值参数

def regist(id, name, age, gender="男"): # 从语法上讲. 不允许, 从代码运行也不允许
print(id, name, age, gender)
regist(3, "王大锤", 20)
regist(4, "李鸿洁", 18, "女")

3. 混合参数  位置参数, 默认值参数
4. 动态传参, *args, **kwargs
实参: 在函数调用的时候给函数传递的具体的值
1. 位置参数

def chi(good_food, junk_food,drink, sweet, xiaoshi, lingshi1, lingshi2, lingshi3, good_food2, xiaoye, shuiguo):
print(good_food, junk_food, drink, sweet)
chi("猪蹄", "北冰洋", "哈根达斯", "薯条", "罐头", "大米饭") def chi(good_food, junk_food,drink, sweet):
print(good_food, junk_food, drink, sweet) chi("大米饭", "猪蹄", "北冰洋", "哈根达斯")

2. 关键字参数

def chi(good_food, junk_food,drink, sweet):
print(good_food, junk_food, drink, sweet)
# 关键字参数: 必须按照形参的名字来传递信息
chi(good_food="大米饭", sweet="哈根达斯", drink="饮料", junk_food="薯条")

3. 混合参数

def chi(good_food, junk_food, drink, sweet):
print(good_food, junk_food, drink, sweet)
chi("大米饭", "薯条", sweet="哈根达斯", drink="北冰洋") # positional argument follows keyword argument 

顺序: 位置, 关键字
传参: 把实参赋值给形参的过程

四.函数的应用

1.注册
def regist():
f = open("account", mode="r+", encoding="utf-8")
while 1:
# 输入用户名和密码
username = input("请输入你的用户名:")
password = input("请输入密码:") for line in f:
if line.strip().split(":")[0] == username:
print("对不起, 该用户已经注册!")
break
else:
print("恭喜, 注册成功")
f.write("\n"+username+":"+password)
# break # 能执行到这个break. for一定是执行完了的.
f.flush()
f.close()
return # 直接结束函数的调用
regist() 2.登录
def login():
username = input("请输入用户名:") # sylar:123
password = input("请输入密码:") # 123
f = open("account", encoding="utf-8")
for line in f:
if line.strip() == username + ":" + password:
print("恭喜你.登录成功 ")
return True # True, 登录成功 else:
print("对不起, 用户名或密码错误")
return False # False 登录失败
login()
login()
login()
login()

练习六..作业

1.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def func(lst):
return lst[1::2]
print(func(['王大锤','刘亦菲','曾小贤','王祖贤','张柏芝','陈小春']))
2.写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def func(lst):
return len(lst)>5
print(func([1,2,2]))
3.写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者。
def func(lst):
if len(lst)>2:
return lst[:2]
print(func([1,2]))
4.写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其他内容的个数,并返回结果。
def func(s):
shuzi = 0
zimu = 0
kongge = 0
qita = 0
for c in s:
if c.isdigit():
shuzi+=1
elif c.isalpha():
zimu+=1
elif c== " ":
kongge+=1
else:
qita += 1
print(shuzi,zimu,kongge,qita)
return shuzi,zimu,kongge,qita
func("hidjhdsfhfhsdsd2323453478%R$%$%$%+--==-g-//..,l")
5.写函数,接收两个数字参数,返回比较大的那个数字。
方案一
def func(a, b):
if a > b:
return a
else:
return b
方案二
def func(a, b):
return a if a > b else b # a>b? a:b 6.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
def func(dic):
dd = {}
for k, v in dic.items():
if len(v) > 2:
v = v[:2]
dd[k] = v
return dd dic = {"k1": "v1v1", "k2": [11,22,33,44]}
print(func(dic))
7.写函数,此函数只接收一个参数且此参数必须是列表数据类型, 此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。
def func(lst):
dic = {}
for i in range(len(lst)): # 索引 0 1 2
dic[i] = lst[i]
return dic print(func([11,22,33]))
8.写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。 用户通过输入这四个内容,然后将这四个内容传入到函数中, 此函数接收到这四个内容,将内容追加到一个student_msg文件中。
def func(name,edu, age, gender="男"):
f = open("student_msg", mode="a", encoding="utf-8")
f.write(name+"$$"+gender+"$$"+edu+"$$"+age+"\n")
f.flush()
f.close()
9.题升级:支持用户持续输入,Q或者q退出,性别默认为男, 如果遇到女学生,则把性别输入女
while 1:
content = input("请输入姓名,年龄,学历,性别(周杰伦,18,小本,)(q退出)")
if content.upper() == "Q":
break
lst = content.split(",") if len(lst) <= 3 or lst[3] == '':
func(lst[0], lst[2], lst[1])
else:
func(lst[0], lst[2], lst[1], lst[3] )
def func(s="男"):
print(s)
func()
10.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成文件的修改操作(升级题)。
def func(file_path, old, new):
with open(file_path, mode="r", encoding="utf-8") as f1, \
open(file_path + "_副本", mode="w", encoding="utf-8") as f2:
for line in f1:
s = line.replace(old, new)
f2.write(s)
os.remove(file_path)
os.rename(file_path+"_副本", file_path) func("student_msg", "$$", "@@")

  

  

python,函数的基本用法的更多相关文章

  1. Python 函数和相关用法笔记

    python中%r和%s的区别 总结:%r打印时能够重现它所代表的对象 __str__和__repr__的用法

  2. Python函数的一点用法

    #python的基本语法网上已经有很多详细的解释了,写在这里方便自己记忆一些 BIF是python内置的函数,任何一门语言都能用来创造函数,python也不例外 1.创建一个函数 def func() ...

  3. python函数和lambda表达式学习笔记

    1. python函数 不同于其他语言,python支持函数返回多个值 为函数提供说明文档:help(函数名)或者函数名.__doc__ def str_max(str1, str2): ''' 比较 ...

  4. python函数的用法

    python函数的用法 目录: 1.定义.使用函数 1.函数定义:def 2.函数调用:例:myprint() 3.函数可以当作一个值赋值给一个变量 例:a=myprint()    a() 4.写r ...

  5. Python正则替换字符串函数re.sub用法示例(1)

    本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替 ...

  6. Python函数装饰器原理与用法详解《摘》

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

  7. python简单的函数定义和用法实例

    python简单的函数定义和用法实例 这篇文章主要介绍了python简单的函数定义和用法,实例分析了Python自定义函数及其使用方法,具有一定参考借鉴价值,需要的朋友可以参考下 具体分析如下: 这里 ...

  8. python学习三十五天函数递归的用法

    python函数递归就是自己调用自己,无限循环,但是python限制了调用的次数1000次,就会终止,递归用在栏目分类,采集程序比较多,下面简单说函数递归用法和实例 1,函数递归用法 def func ...

  9. 为什么需要激活函数 为什么需要归一化 python内置函数:enumerate用法总结

    为什么需要激活函数 为什么需要归一化 python内置函数:enumerate用法总结 待办 激活函数的用途(为什么需要激活函数)? 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情 ...

随机推荐

  1. 使用Holer外网SSH访问内网(局域网)Linux系统

    1. Holer工具简介 Holer exposes local servers behind NATs and firewalls to the public internet over secur ...

  2. Java开发软件安装及配置

    2017-6-1 1.jdk 1.8.0_131 安装JDK 选择安装目录 安装过程中会出现两次 安装提示 . 第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的 ...

  3. Oracle之数据库的增删改查和格式的修改

    Oracle修改数据 *update语句 格式: update table_name set column1=value1,…[where conditions] 例子: update userinf ...

  4. P3366 【模板】最小生成树(boruvka/sollin)

    P3366 [模板]最小生成树 boruvka/sollin 复杂度$O(mlogn)$ 简要说明一下过程 引入一个数组$link[i]$表示连通块$i$下一步可更新的最短的边的编号 1.每次枚举所有 ...

  5. mongodb安装、远程访问设置、基本常用操作和命令以及GUI

    https://www.mongodb.com/download-center?jmp=nav下载对应OS的版本,tar -xzvf解压 对于最新版本比如3.4,windows 7下可能回报api-m ...

  6. opencvbase 实现opencv打开摄像头和初步处理等效果操作(附源码)

    // TwoCameraOnTimer2Dlg.cpp : 实现文件 /* CvMat, Mat, IplImage之间的互相转换 IpIImage -> CvMat CvMat mathead ...

  7. Codeforces 837D Round Subset - 动态规划 - 数论

    Let's call the roundness of the number the number of zeros to which it ends. You have an array of n ...

  8. tar+nc传输文件的使用

  9. 【转】java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  10. 又是DataSnap的问题

    最近在调试DataSnap的程序,突然发现TClientDataSet打不开了,报错为dsnap200.bpl的非法地址访问,如下图: 很是怪异,干脆新建工程,只有TSQLConnection.TSQ ...