ENH:
#### Is your feature request related to a problem?

I wish I could have a better way to mix loc index and iloc index.

#### Describe the solution you'd like

I think we can have a loc[...] like s_[...] in numpy.
The loc[] return a sepical type named " Locater " which wrap the loc index
And the DataFrame.iloc.__(get|set|del)item__ can recognize it and use its own indexer to get index.
So if we want the 0 row ,"A","B" column of Dataframe df.
We can use df.iloc[0, loc[["A","B"]] ] instead of df.iloc[0,df.columns.get_indexer(['A','B'])]
meanwhile, if labels out of array , will raise an error instead of get the last elements!

#### Additional context

i think the Locater can also have a __call__ which accept a df
so we can use like this:
```python
l = loc['a','b','c','d']
l(df,axis=0) 
# equal to df.index.get_index(['a','b','c','d'])
l(df,axis=1) 
# equal to df.columns.get_index(['a','b','c','d'])
l(axis=1) 
# no df parameter
# return a new Locater instance with default parameter: axis = 1
```
and the __call__ can have parameter like:
df:Union[Series,DataFrame]
 the indexer's provider
axis:int 
 determind use on wether ind or col of df.
 only available if df is instance of DataFrame
 default 0
 if its called by df.__[...]item___ ,will change it by its position in df[...]
out_index:str  
 determind what to do if out of index
 can be "warn" "error" "skip"
 default "error"
endpoint:str
 determind wether to contain the endpoint
 can be "both","left","right","none" 
method,limit,tolarence: pass to df.[...].get_index
