python学习笔记一基础和函数

1.python中不存在null,true,false

在字典中要做替换成None,True,False

2.取字典数据时,使用网站https://www.bejson.com/jsonviewernew/,可以更清晰的看json/字典结构

3.函数的形参、实参、位置参数

def add(a,b):     #形参,形式参数
    print(a+b)

add(2,3)          #实参,实际参数,a指向2,b指向3

add(a=3,b=2) #明确位置指向的实际参数

4.打开文件的函数open(),查看函数默认参数的方法:鼠标移到函数上,ctrl+鼠标左键

5.默认参数:函数有默认参数。要把无默认参数的放前面,有默认参数的放后面,比如:add(a,b=2),不然会报错

def add(a=2,b=3):     #给默认参数
    print(a+b)

add()          #调用时,不需要传参,也可得到结果 5

add(a=4,b=5)     #更新赋值

举例:调用目录下的文件

def data_dir(filePath='d:/data',fileName=None):
    print(filePath)
    print(fileName)
data_dir(fileName='test.txt')     #因为函数有默认参数,所以需写清文件名的指定参数名,不然会默认把test.txt赋给filePath

6.函数的动态参数

用到动态参数的场景:请求参数个数不确定;请求参数的数据类型不确定(可能是元组、字典、字符串)

#动态参数
def f1(*args,**kwargs):
    pass

#一个*代表的数据类型是元组,两个*代表的数据类型是字典。当赋值的实参不是字典,都会放到元组当中
举例:
def f1(*args,**kwargs):
    print(args,kwargs)

f1([1,2,3])
f1('a')
f1({nam='wuya'})
f1({dict1={
'name':'wuya'})
输出结果:
([1,2,3],){}
(‘a’,){}
(){'name':'wuya'}
(){'dict1':{'name':'wuya'}}

举例:需求:

1.对请求参数进行ascill排序(sorted函数)

2.排序后,对请求参数进行md5加密

实现:1.排序

def data(**kwargs):
    return dict(sorted(kwargs.items(),key=lambda item:item[0]))

dict1={'name':'wuya','age':18,'address':'xian','work':'tester'}
print(data(**dict1))

2.加密

思路:写一个函数,获取请求参数,对请求参数进行加密。

对密码进行加密登录:

import requests
import hashlib

def MD5_login(str):    
    zt_pwd = hashlib.md5()  
    zt_pwd.update(str.encode(encoding='utf-8'))
    return zt_pwd.hexdigest()

password = '123456' #登陆的用户密码=='123456'
url = 'http://192.168.1.105:81/zentao/user-login-L3plbnRhby8=.html'
data = {'account':'admin','password':MD5_login(password),'referer':'/zentao/'}
response = requests.post(url,data=data) # 发送post请求
print(response.content.decode('utf-8'))

7.函数返回值

  • 每一个函数都有返回值(针对使用print()的函数,返回值就是None
  • return后面的内容就是函数的返回值

什么样的情况下使用函数返回值:获取token、session、cookie;查看提交的订单编号等情况

获取token的思路:发送登录请求,拿到返回结果,取到token值;下次访问其他界面时把token带进去

 1 def login():
 2     username=input('请输入登录账号:
')
 3     password=input('请输入登录密码:
')
 4     if username=='wuya' and password=='123456'
 5         return 'hdklfhkdfu4343'
 6 
 7 def profile(token):
 8     if token==login():
 9         print('欢迎访问无涯的首页')
10     else:
11         print('未登录,跳转到登录的页面,302')
12 
13 profile('hdklfhkdfu4343')

8.函数作用域

  •  全局作用域:针对全局变量
  • 局部作用域:针对局部变量
1 #代码执行顺序是从上往下的,当函数名相同时,调用距离最近的函数
2 name='无涯'                #全局变量
3 def f():
4     name='无涯课堂'        #局部变量
5     print(name)
6 f()
#输出结果:
无涯课堂
name='无涯'              
def f():
    print(name)
f()
#输出结果:
无涯

引进全局变量,并更新:

name='无涯'
def f():
    global name
    name='无涯课堂'
    print(name)
f()
#输出结果:
无涯课堂

函数执行顺序:

def f():
    name='我是父函数的值'
    def f1():
        name='我是子函数的值'
        print(name)
    return f1()

f()

#函数执行顺序
1.执行def f(),找到name=父函数的值
2.执行 return f1()
3.找到f1函数里面的name变量,输出了name是值
4.输出:我是子函数的值

9.内部函数:(比如max()、min()、type()等)

  • 不修改全局变量可以访问全局变量
  • 修改同名全局变量,则python会认为它是一个局部变量
  • 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError

10.三目运算:

1.一是通过if语句实现的,语法如下:

<true statement> if <condition expression> else <false statement>

首先对条件表达式<condition expression>求值,如果值为True,则执行<true statement>,否则执行<false statement>

x=1
y=3
z= x-y if x>y else x+y
print(z)

2.是通过and、or来实现,此方式利用的是逻辑运算符的短路原则来实现的。语法如下:

<condition expression> and <true statement> or <false statement>
x=1
y=3
z= x>y and x-y or x+y
print(z)

11.lambda匿名函数语法:(冒号前是参数,冒号后是判断及表达式)

lambda parameters:express

parameters:可选,如果提供,通常是逗号分隔的变量表达式形式,即位置参数

expression:不能包含分支或循环(但允许条件表达式),也不能包含return(或yield)函数。如果为元组,则应用圆括号将其包含起来。

调用lambda函数,返回的结果是对表达式计算产生的结果

根据参数是否为1 决定s为yes还是no
>>> s = lambda x:"yes" if x==1 else "no"
>>> s(0)
'no'
>>> s(1)
'yes'

上面例子中,将if...else语句缩减为单一的条件表达式,语法为:

               expression1 if A else expression2

如果A为True,条件表达式的结果为expression1,否则为expression2 

login=lambda username,password:print('登录成功')if username=='wuya' and password=='123456' else print('登录失败')

print(login('wuya','123456'))

#输出:
登录成功
data=lambda **kwargs:dict(sorted(kwargs.items(),key=lambda item:item[0]))

print(data('name':'wuya','age':18,'address':'xian','work':'tester'))

sorted(d.items(), key=lambda x: x[1]) 中 d.items() 为待排序的对象(即kwargs);key=lambda x: x[1] 为对前面的对象中的第二维数据(即value)的值进行排序(即对第一个item进行排序)。

key=lambda 变量:变量[维数] 。维数可以按照自己的需要进行设置。

12.map函数

功能:遍历序列,对序列中每个元素进行操作,最终获取新的序列。

map(function, iterable, ...)

  • function -- 函数
  • iterable -- 一个或多个序列,可迭代的,可以for循环的
  • 将函数返回值添加到结果中
i = [11, 22, 33, 44, 55]
def f2(a):
    return a + 100
  
result = map(f2, li)                  #输出[111,122,133,144,155]
result = map(lambda a: a + 200, li)   #输出[211,222,233,244,255]
print(list(result))

应用场景:

1、每个元素增加100

2、两个列表对应元素相加

注意:map()函数不改变原有的list,而是返回一个新的list

利用map()函数,可以把一个list 转换为另一个list,只需要传入转换函数。
由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的list,事实上它可以处理包含任意类型的list,只要传入的函数f可以处理这种数据类型。
list1= [11, 22, 33, 44, 55]
print(list(map(lambda a:a+100,list1)))

13.filter函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

语法:

filter(function, iterable)
list1=[-1,1,2,3,4,5]
def f():
    list2=[]
    for i in list1:
        if i>1:                   #过滤掉小于1的数
            list2.append(i)       #把大于1的数追加到list2里面
    print(list2)  
用filter函数实现:
list1=[-1,1,2,3,4,5]

print(list(filter(lambda a:a>1,list1)))
原文地址:https://www.cnblogs.com/dydxw/p/14203570.html