python笔记10
今日内容
参数
作用域
函数嵌套
知识点回顾
函数基本结果
def func(name,age,email):
# 函数体(保持缩进一致)
a = 123
print(a)
return 1111#函数中,出现return后,后面的语句不再执行。
b = 456
print(b)
result = func(1,2,3)
# 函数默认返回值:None
参数
def func(n1,n2):
print(n1,n2)
func(1,2)
func(1,[11,22,3])
func({'k1':'k'},[11,22,3])
# 严格按照顺序传参数:位置方式传参。
# 实际参数可以是任意类型。
返回值
函数没有返回值,默认返回:None
函数内部执行过程中遇到return,就终止。
def func1():
return "完成" # 函数每次执行到此,就返回;所以下面代码永远不执行。
for i in range(10):
print(i)
func1()def func2():
for i in range(10):
print(i)
return "完成"
print(666)
func2()
return 可以返回任意类型
def func():
return (1,2,3)v = func()
print(v) # 特殊:返回元组
def func():
return 5,8,"alex" v = func()
print(v)
昨日作业题
def func(data_list):
val = data_list[1::2]
return list(val)
v1 = func([1,2,3,4,5,5])
print(v1)
v2 = func((1,2,3,4,5,5))
print(v2)
# 其他类型可以通过强制转换为列表
# v1 = (1,2,3,4)
# v1 = {1,2,3,4}
# v1 = {'k1':'v1','k2':'v2'}
v1 = "asdfasdfasdf"
v2 = list(v1)
print(v2)
def func(arg):
if len(arg) > 5:
return True
else:
return False
data = func([1111,22,3,42,12])
data = func((1111,22,3,42,12)
def func(a1,a2):
if a1 > a2:
return a1
else:
return a2
v1 = func(1,2)
v2 = func(11,2)
def func(a1,a2):
return a1 if a1 > a2 else a2
v1 = func(1,2)
v2 = func(11,2)
def func(name,gender,age,edu):
# template = "%s*%s*%s*%s" %(name,gender,age,edu,)
# return template
data_list = [name,gender,age,edu]
return "*".join(data_list)
n1 = input('>')
n2 = input('>')
n3 = input('>')
n4 = input('>')
result = func(n1,n2,n3,n4)
print(result)
def func(max_range):
result = [1,1]
while True:
val = result[-1] + result[-2]
if val > max_range:
break
result.append(val)
return result
v = func(100)
print(v)
def func(name):
with open('data.txt',mode='r',encoding='utf-8') as obj:
# 方式一
content = obj.read()
flag = False
row_list = content.split('\n') # ['1|alex|123123','2|eric|rwerwe','3|wupeiqi|pppp']
for row in row_list:
v= row.split('|')
if v[1] == name:
flag = True
break
return flag
func('alex')
func('eric')
# ############################################
def func(name):
with open('data.txt',mode='r',encoding='utf-8') as obj:
# 方式一
content = obj.read()
row_list = content.split('\n') # ['1|alex|123123','2|eric|rwerwe','3|wupeiqi|pppp']
for row in row_list:
v= row.split('|')
if v[1] == name:
return True
v1 = func('alex')
if v1:
print('存在')
else:
print('不存在')
今日内容详细
参数
基本参数知识
任意个数
任意类型
def func(a1,a2,a3):
print(a1,a2,a3)func(1,"asdf",True)
位置传参(调用函数并传入参数)【执行】
def func(a1,a2):
print(a1,a2)func(1,3)
关键字传参【执行】
def func(a1, a2):
print(a1, a2)func(a2=99,a1=2) # 关键字传参数和位置传参可以混合使用(位置传入的参数 > 关键字参数在后 = 总参数个数)
def func1(a1, a2, a3):
print(a1, a2, a3) # func(1, 2, a3=9)
# func(1, a2=2, a3=9)
# func(a1=1, a2=2, a3=9)
# func(a1=1, 2,3) # 错误
默认参数【定义】
def func(a1,a2,a3=9,a4=10):
print(a1,a2,a3,a4)func(11,22)
func(11,22,10)
func(11,22,10,100)
func(11,22,10,a4=100)
func(11,22,a3=10,a4=100)
func(11,a2=22,a3=10,a4=100)
func(a1=11,a2=22,a3=10,a4=100)
万能参数(打散)
*args
可以接受任意个数的位置参数,并将参数转换成元组。
调用函数无 *
def func(*args):
print(args)func(1,2,3,4)
(1, 2, 3, 4)
调用函数有 *
def func(*args):
print(args)func(*(1,2,3,4))
func(*[1,2,3,4])
(1, 2, 3, 4)
(1, 2, 3, 4)
只能用位置传参
def func(*args):
print(args)# func(1)
# func(1,2)
func(1,2) # args=(1, 2)
func((11,22,33,44,55))
# args=((11,22,33,44,55),),不带星号,相当于把当当成一个整体,当作元组的一个元素。
func(*(11,22,33,44,55)) # args=(11,22,33,44,55) (1,)
(1, 2)
(1, 2)
((11, 22, 33, 44, 55),)
(11, 22, 33, 44, 55)
**kwargs
可以接受任意个数的关键字参数,并将参数转换成字典。
调用函数无 **
def func(**kwargs):
print(kwargs)func(k1=1,k2="alex")
{'k1': 1, 'k2': 'alex'}
调用函数有**
def func(kwargs):
print(kwargs)
func({'k1':'v2','k2':'v2'}) # kwargs={'k1':'v2','k2':'v2'}
只能用关键字传参
综合应用:无敌 + 无敌 => 真无敌
def func(*args,**kwargs):
print(args,kwargs)# func(1,2,3,4,5,k1=2,k5=9,k19=999)
func(*[1,2,3],k1=2,k5=9,k19=999)
func(*[1,2,3],**{'k1':1,'k2':3})
func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3}) (1, 2, 3, 4, 5) {'k1': 2, 'k5': 9, 'k19': 999}
(1, 2, 3) {'k1': 2, 'k5': 9, 'k19': 999}
(1, 2, 3) {'k1': 1, 'k2': 3}
(111, 222, 1, 2, 3) {'k11': 'alex', 'k1': 1, 'k2': 3}
参数相关重点:
定义函数
def func1(a1,a2):
passdef func2(a1,a2=None):
passdef func3(*args,**kwargs):
pass调用函数
位置参数 > 关键字参数
作用域
python中:
py文件:全局作用域
函数:局部作用域
a = 1
def s1():
x1 = 666
print(x1)
print(a)
print(b)b = 2
print(a)
s1()
a = 88888
def s2():
print(a,b)
s1() s2() ======
1
666
1
2
88888 2
666
88888
2
总结:
一个函数是一个作用域
def func():
x = 9
print(x)
func()
print(x)#全局变量无x定义,报错。作用域中查找数据规则:优先在自己的作用域找数据,自己没有就去 "父级" -> "父级" -> 直到全局,全部么有就报错。注意:父级作用域中的值到底是什么?
x = 10
def func():
x = 9
print(x)func()
练习题:
#!/usr/bin/env python
# -- coding:utf-8 --# x = 10
# def func():
# x = 9
# print(x)
# def x1():
# x = 999
# print(x)
#
# func() # x = 10
# def func():
# x = 9
# print(x)
# def x1():
# x = 999
# print(x)
# x1()
#
# func() # x = 10
# def func():
# x = 9
# print(x)
# def x1():
# x = 999
# print(x)
# print(x)
# x1()
#
# func() # x = 10
# def func():
# x = 8
# print(x)
# def x1():
# x = 999
# print(x)
# x1()
# print(x)
#
# func() # x = 10
# def func():
# x = 8
# print(x)
# def x1():
# print(x)
# x1()
# print(x)
#
# func() # x = 10
# def func():
# x = 8
# print(x)
# def x1():
# print(x)
# x = 9
# x1()
# x = 10
# print(x)
#
# func() #
# x = 10
# def func():
# x = 8
# print(x)
# def x1():
# print(x)
#
# x1()
# x = 9
# x1()
# x = 10
# print(x)
#
# func()
子作用域中只能 找到父级中的值 ,默认无法重新为父级的变量进行赋值。(global/nonlocal可以强制做)
# #####################
name = 'oldboy'
def func():
name = 'alex' # 在自己作用域再创建一个这样的值。
print(name)
func()
print(name)# #####################
name = [1,2,43]
def func():
name.append(999)#列表为可变类型,可以修改。这里是修改,不是重新赋值。
print(name)
func()
print(name) # ###################### 如果非要对全局的变量进行赋值
# 示例一
name = ["老男孩",'alex']
def func():
global name
name = '我'
func()
print(name)
# 示例一
name = "老男孩"
def func():
name = 'alex'
def inner():
global name
name = 999
inner()
print(name)
func()
print(name) name = "老男孩"
def func():
name = 'alex'
def inner():
global name
name = 999
inner()
print(name)
func()
print(name) # ############################## nonlocal
name = "老男孩"
def func():
name = 'alex'
def inner():
nonlocal name # 找到上一级的name
name = 999
inner()
print(name)
func()
print(name)
总结
- 参数
- 调用(执行)函数时,传参:位置参数 > 关键字参数
- 定义函数:
- def func(a)
- def func(a,b=None) # 对于默认值,如果是可变类型,----> 坑。
- def func(*args,**kwargs)
- 作用域
- 函数为作用域
- 自己 > 父级 > 父级 > 全局 【读/修改(可变)】
- 重新赋值:
- global
- nonlocal
补充
全部变量以后必须全部是大写
USER_LIST = [11,22,3]def func():
name = 'asdf'
USER_LIST.append(12)
USER_LIST.append(name) func()
print(USER_LIST)
python笔记10的更多相关文章
- python笔记-10(socket提升、paramiko、线程、进程、协程、同步IO、异步IO)
一.socket提升 1.熟悉socket.socket()中的省略部分 socket.socket(AF.INET,socket.SOCK_STREAM) 2.send与recv发送大文件时对于黏包 ...
- selenium+python笔记10
#!/usr/bin/env python # -*- coding: utf-8 -*- """ 我们多添加一些测试场景,比如:删除邮件,查找邮件,发送邮件等等 &qu ...
- Python笔记 #10# Histograms
1.Build a histogram In [1]: help(plt.hist) Help on function hist in module matplotlib.pyplot: hist(x ...
- Python标准库笔记(10) — itertools模块
itertools 用于更高效地创建迭代器的函数工具. itertools 提供的功能受Clojure,Haskell,APL和SML等函数式编程语言的类似功能的启发.它们的目的是快速有效地使用内存, ...
- Python笔记之不可不练
如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...
- boost.python笔记
boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
- 8.python笔记之面向对象基础
title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...
- python笔记 - day8
python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...
随机推荐
- source命令 导入.sql文件时,中文乱码 或者是注释乱码
1.source命令 导入.sql文件时,中文乱码 或者是注释乱码 首先进入dos命令,进入mysql数据库,之后use 数据库:之后查看你的mysql数据库编码 如下命令:模糊查询变量charact ...
- php的弱类型比较
1.==和=== ==为弱相等,也就是说12=="12" --> true,而且12=="12cdf" --> true,只取字符串中开头的整数部分 ...
- 方法重载(Overload)
方法重载(Overload):多个方法名称一样,但参数列表不一样. (一个方法名称,实现类似的多个功能) 方法重载与下列因素有关: 1. 参数个数不同 public static int sum(in ...
- P1120/UVA307 小木棍(sticks) 题解
题目描述 pdf 题解 注意的问题是,各个原始木棒的长度都是一样的! 说一下本题的总思路即:DFS+超强力剪枝!(详见本人的 AC 程序) 首先,我们要从小到大枚举原始木棒的长度len,也就是枚举答案 ...
- error C2664: “FILE *fopen(const char *,const char *)”: 无法将参数 1 从“LPCTSTR”转换为“const char *”
遇到这个问题,请打开本项目的Properties(属性)-------> Configuration Properties(配置属性)-------->General(常规)------- ...
- PL-USB2-BLASTER 使用说明
PL-USB2-BLASTER 使用说明 PL-USB2-BLASTER就是USB BLATER II烧录器.官方文档在https://www.intel.com/content/dam/www/pr ...
- Python开发之Anconda环境搭建
Python的强大之处在于它的应用范围广泛,遍及人工智能.科学计算.web开发.系统运维.大数据及云计算等,实现其强大功能的前提,就是Python具有数量庞大且功能相对完善的标准库和第三方库.通过对库 ...
- CentOS6.9安装redis
目录 Centos6.9下的Redis安装和配置(最简易方式) redis客户端登录方式 Centos6.9下的Redis安装和配置(最简易方式) 在服务器上创建一个目录/service,然后下载re ...
- HTML相关知识点(2)
CSS: 字体: 网页默认字体16px; 网站通用字体大小14px 最小是12px,最大无限大 单位换算:1em=16px 选择器:标签选择器:选择页面中所有指定标签,权重为1 通配符选择器:选择所 ...
- 新闻网大数据实时分析可视化系统项目——11、MySQL安装
1.修改yum源 鉴于用国外的Yum源,速度比较慢,所以想到将国外的yum源改为国内的Yum源,这里选择使用比较多的阿里云源.具体修改方法可以参考此连接 2.在线安装mysql 通过yum在线mysq ...