一、函数的初始

比如python没有len()方法,如果求字符串的长度

使用for循环

s = 'asdfadsf'
count = 0
for i in s:
count += 1
print(count)

列表呢?

li = [1,2,3,'a','b','c','ask']
count = 0
for i in li:
count += 1
print(count)  

如果是字典呢?再把上面的代码贴一遍?可以看出2点:

1.重复代码多

2.可读性差

写代码,一切以精简为主,避免重复代码。

针对这种情况,出现了函数

函数是组织好的,可重复使用的,用来实现单一,或i相关联功能的代码段。

函数的产生:

函数就是封装一个功能的代码片段。

def my_len():
#def 关键字,定义一个函数
# my_len 函数名的书写规则与变量一样。
# def 与函数名中间一个空格
# 函数名():加上冒号(将函数名与函数体隔开),括号是用来传参的。
# 函数体 就是函数里面的逻辑代码
count = 0
for j in li:
count += 1
print(count)  

以上就是一个函数

代码是从上至下执行的,执行到def my_len()时,将my_len这个变量名加载到临时内存中,它不执行。函数如何执行呢?

函数的执行:函数名+()

# 执行函数
my_len()  

当见到my_len()时,只有见到这个括号(),程序会根据函数名从内存中找到函数体,然后执行它,没有括号,它是不会执行的。

二、函数返回值

写函数,不要在函数中写print()。函数是以功能为导向的,除非测试的时候,才可以写print()。

1.在函数中,遇到return结束函数。

def func():
print(111)
return
print(444)
func()

2.将值返回给函数的调用者。  

def func():
a = 134
return a
print(func())

  1.无return

def func():
pass
print(func())

  2.return None(没有意义)

def func():
return None
print(func())

  3.return  1个值     该值是什么,就直接返回给函数的调用者,函数名()

def func():
return [1,2,3]
print(func())

  4.return  多个值     将多个值放到一个元组里,返回给函数的调用者。

def func():
return 1,2,[33,44],'abc'
print(func()) 
li = [1,2,3,'a','b','c','ask']
def my_len():
count = 0
for j in li:
count += 1
return count
print(my_len())

查看len方法的编码

def len(*args,**kwargs):
pass  

pass表示使用C写的。发现my_len()和len()方法,有些类似了。能返回变量的长度了,但是和len()有些区别。len可以传参数,比如len('123')

三、函数的传参

def my_len(l):     # l 形式参数,形参
print(l) # 实际对应就是a
count = 0
for j in l:
count += 1
return count a = 'fasdf'
print(my_len(a)) # 括号里面的是实际参数,实参  

实参角度:

1.位置传参。按顺序,一一对应

def func(a,b,c):
print(a)
print(b)
print(c)
func('asdfljasfd',3,4)  

如果少一个参数呢?

def func(a,b,c):
print(a)
print(b)
print(c)
func(3,4)  

执行报错

TypeError: func() missing 1 required positional argument: 'c'

必须是一一对应的。

2.关键字传参,不按顺序,一一对应。

def max_min(a,b):
return a if a > b else b print(max_min(b = 1, a = 3))

3.混合传参,关键字参数永远在最后面  

def func(a,b,c,d,e):
print(a)
print(b)
print(c)
print(d)
print(e)
func(1,2,c=3,4,5)

执行报错:

SyntaxError: positional argument follows keyword argument

正确的写法:

def func(a,b,c,d,e):
print(a)
print(b)
print(c)
print(d)
print(e)
func(1,4,d=2,c=3,e=5)  

按照形参角度。

1.位置传参。按顺序,一一对应。

def func(a,b,c):
print(a)
print(b)
print(c)
func('asdf',3,4)

2.默认参数,传参则覆盖,不传则默认,默认参数永远在位置参数后面

def func(a,b=666):
print(a,b)
func(1,2)
def func(a,b=666):
print(a,b)
func(1)

举一个场景

班主任录入员工信息表

while True:
username = input('请输入姓名:').strip()
sex = input('请输入性别:').strip()
with open('name_list',encoding='utf-8',mode='a') as f1:
f1.write('{}\t{}\n'.format(username.sex))

查看文件内容

有2个问题。第一,男生居多。第二,完成函数功能。修改 一下如下:

def Infor_entry(username,sex='男'):
with open('register_msg.txt',encoding='utf-8',mode='a') as f1:
f1.write('{}\t{}\n'.format(username,sex)) while True:
username = input('请输入姓名(男生以1开头):').strip()
if '1' in username:
#去除1
username = username[1:]
Infor_entry(username)
else:
Infor_entry(username,'女')

四、三元运算

三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值

格式:     [on_true] if [expression] else [on_false]

res = 值1 if条件 else 值2

三元运算只适用于简单的if else判断,再多一层if判断就不适用了。

举例说明:

a = 1
b = 2
c = a if a > b else b #如果a大于1的话,c=a,否则c=b

写一个函数,功能比大小,大者返回

def max_min(a,b):
if int(a) > int(b):
return a
else:
return b print(max_min(1,3))

上面的max_min函数,可以使用三元运算进行简写

def max_min(a,b):return a if a > b else b

今日作业:

练习题

1、整理函数相关知识点,写博客
2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5
4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    dic = {"k1""v1v1""k2": [11,22,33,44]}
    PS:字典中的value只能是字符串或列表
8、写函数,接收两个数字参数,返回比较大的那个数字。
9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。
10、写一个函数完成三次登陆功能,再写一个函数完成注册功能(进阶)
明日默写。
①,return的作用。
②,传参的几种方法,每个都简单写一个代码。
如,实参,按位置传参。
def func(x,y):
Pass
func('a','b')

 答案: 

第二题:

def func1(argv):return argv[1::2]
print(func1([1,2,3,4]))

第三题:

def func1(argv):return len(argv) > 5
print(func1([1,2,3,4,5,6,7,8]))

第四题:

def func1(args): return args[:2] if len(args) > 2 else args
print(func1([1,2,3,4,5]))

第五题:

def func(argv):
dic = {'digit':0,'aplha':0,'space':0,'other':0}
for i in argv:
if i.isdigit():
dic['digit'] += 1
elif i.isalpha():
dic['aplha'] += 1
elif i.isspace():
dic['space'] += 1
else:
dic['other'] += 1
return '数字{},字母{},空格{},其它'.format(dic['digit'],dic['aplha'],dic['space'],dic['other']) print(func('4566asf &*(^&adf654664 flk'))

第六题:

def contain_space(data):
for i in data:
if i == ' ':
flag = True
break
else:
flag = False return '对象含有空格' if flag else '对象没有空格' data = 'asfj asdfk'
print(contain_space(data))

第7题:

def func(argv):
for i in argv:
argv[i] = argv[i][:2]
return argv dic = {'k1':'v1v1','k2':[11,22,33,44]}
print(func(dic))

第8题:

def max_min(a,b):return a if a > b else b

print(max_min(5,8))

第9题:

python 全栈开发,Day9(函数的初始,返回值,传参,三元运算)的更多相关文章

  1. python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域

    一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...

  2. python全栈开发笔记---------函数

    一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...

  3. python全栈学习--day9(函数初始)

    Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...

  4. python全栈开发-Day8 函数基础

    python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需 ...

  5. python全栈开发-前方高能-函数进阶

    python_day_10 一.今日主要内容 1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序: 位置,*args,默认值,**kwargs 在形参上 ...

  6. python全栈开发_day15_函数回调和模块

    一:函数回调 def a(fn=None): print("run1") if fn: fn() print("run 2") def b(): print(& ...

  7. python全栈开发-前方高能-函数

    python_day_9 一.今日主要内容 函数: 函数:对功能的封装 语法: def 函数名(形参): 函数体 函数名(实参) 函数名:命名规则和变量一样 函数的返回值: return, 函数执行完 ...

  8. python全栈开发_day10_函数的实参和形参

    一:函数的实参和形参 实参是在调用函数时()出现的外界的实际的值 形参不能再函数外部直接使用 1)实参的两种形式 实参是调用函数时()中传入的参数 1.位置实参 def a(a): print(a) ...

  9. python 全栈开发,Day107(CRM初始,权限组件之权限控制,权限系统表设计)

    一.CRM初始 CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销 ...

  10. Python全栈开发day9

    一.面向对象进阶 1.利用python反射查看面向对象成员 对于对象:反射既可以找对象,类的成员 对于类:反射只能找类中的成员 2.利用反射操作模块(查找类,创建对象,查找对象中字段) 1 2 3 4 ...

随机推荐

  1. 015-elasticsearch5.4.3【五】-搜索API【四】Joining 多文档查询、GEO查询、moreLikeThisQuery、script脚本查询、span跨度查询

    一.Joining 多文档查询 joining query 像Elasticsearch这样的分布式系统中执行完整的SQL样式连接非常昂贵.相反,Elasticsearch提供两种形式的连接,旨在水平 ...

  2. AWK之随心所欲-高手篇

    1.内置变量 变量名 描述 FS 输入字段分隔符,默认是空格或制表符 OFS 输出字段分隔符,默认是空格 RS 输入记录分隔符,默认是换行符\n ORS 输出记录分隔符,默认是换行符\n NF 统计当 ...

  3. 类TreeSet

    /* * TreeSet能够对元素按照某种规则进行排序 * * 排序有2种方式 * A自然排序 * B比较器排序 * */ import java.util.TreeSet; /* * TreeSet ...

  4. IDE(Pycharm&&IDEA)配置文件模版

    Pycharm ====> 修改Python Script : 修改位置:Edito >> File and CodeTemplates >> Python Script ...

  5. 桌面应用开发用到的Framework

    桌面应用开发用到的Framework https://github.com/zhangqs008/Framework_Winform

  6. MVC 源码系列之控制器激活(一)

    Controller的激活 上篇说到Route的使用,GetRoute的方法里面获得RouteData.然后通过一些判断,将最后的RouteData中的RouteHandler添加到context.R ...

  7. python基础-9__import__ 反射和面向对象基础 self 封装 继承(多继承顺序) 多态

    一 反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...

  8. 使用Vsftpd服务(匿名访问模式、本地用户模式)

    FTP协议占用两个端口号: 21端口:命令控制,用于接收客户端执行的FTP命令. 20端口:数据传输,用于上传.下载文件数据.. FTP数据传输的类型: 主动模式:FTP服务端主动向FTP客户端发起连 ...

  9. sqlMap.xml配置文件中迭代一个集合的方式

    比如:根据班级号查询学生的信息,参数是list 1.foreach的用法:[写法一] <select id="getStudentListByClassId" resultM ...

  10. 【洛谷p3956】棋盘

    日常blog(✧◡✧) 棋盘[题目链接] 算法: 然后这是2017普及组: first.关于颜色处理:让c[i][j]=color+1:这样无色=0,红色=1,黄色=2: 然后其实是记忆化,将记答案的 ...